Index: /issm/trunk-jpl/src/c/Makefile.am
===================================================================
--- /issm/trunk-jpl/src/c/Makefile.am	(revision 27685)
+++ /issm/trunk-jpl/src/c/Makefile.am	(revision 27686)
@@ -90,4 +90,5 @@
 	./classes/Cfsurfacesquare.cpp \
 	./classes/Cfdragcoeffabsgrad.cpp \
+	./classes/Cfrheologybbarabsgrad.cpp \
 	./classes/Cfsurfacelogvel.cpp \
 	./classes/Cflevelsetmisfit.cpp \
Index: /issm/trunk-jpl/src/c/classes/Cfrheologybbarabsgrad.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Cfrheologybbarabsgrad.cpp	(revision 27686)
+++ /issm/trunk-jpl/src/c/classes/Cfrheologybbarabsgrad.cpp	(revision 27686)
@@ -0,0 +1,176 @@
+/*!\file Cfrheologybbarabsgrad.cpp
+ * \brief: Cfrheologybbarabsgrad 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 "./ExternalResults/ExternalResult.h"
+#include "./ExternalResults/Results.h"
+#include "../datastructures/datastructures.h"
+#include "./Elements/Element.h"
+#include "./Elements/Elements.h"
+#include "./FemModel.h"
+#include "../modules/SurfaceAreax/SurfaceAreax.h"
+#include "../classes/Params/Parameters.h"
+#include "../classes/gauss/Gauss.h"
+#include "./Inputs/DatasetInput.h"
+/*}}}*/
+
+/*Cfrheologybbarabsgrad constructors, destructors :*/
+Cfrheologybbarabsgrad::Cfrheologybbarabsgrad(){/*{{{*/
+
+	this->definitionenum = -1;
+	this->name = NULL;
+	this->weights_enum = UNDEF;
+	this->misfit=0;
+	this->timepassedflag = false;
+}
+/*}}}*/
+Cfrheologybbarabsgrad::Cfrheologybbarabsgrad(char* in_name, int in_definitionenum, int in_weights_enum, bool in_timepassedflag){/*{{{*/
+
+	this->definitionenum=in_definitionenum;
+
+	this->name		= xNew<char>(strlen(in_name)+1);
+	xMemCpy<char>(this->name,in_name,strlen(in_name)+1);
+
+	this->weights_enum=in_weights_enum;
+	this->timepassedflag=in_timepassedflag;
+
+	this->misfit=0;
+}
+/*}}}*/
+Cfrheologybbarabsgrad::~Cfrheologybbarabsgrad(){/*{{{*/
+	if(this->name)xDelete(this->name);
+	this->misfit=0;
+}
+/*}}}*/
+/*Object virtual function resolutoin: */
+Object* Cfrheologybbarabsgrad::copy() {/*{{{*/
+	Cfrheologybbarabsgrad* mf = new Cfrheologybbarabsgrad(this->name,this->definitionenum, this->weights_enum,this->timepassedflag);
+	mf->misfit=this->misfit;
+	return (Object*) mf;
+}
+/*}}}*/
+void Cfrheologybbarabsgrad::DeepEcho(void){/*{{{*/
+	this->Echo();
+}
+/*}}}*/
+void Cfrheologybbarabsgrad::Echo(void){/*{{{*/
+	_printf_(" Cfrheologybbarabsgrad: " << name << " " << this->definitionenum << "\n");
+	_printf_("    weights_enum: " << weights_enum << " " << EnumToStringx(weights_enum) << "\n");
+	_printf_("	  timepassedflag: "<<timepassedflag<<"\n");
+}
+/*}}}*/
+int Cfrheologybbarabsgrad::Id(void){/*{{{*/
+	return -1;
+}
+/*}}}*/
+void Cfrheologybbarabsgrad::Marshall(MarshallHandle* marshallhandle){/*{{{*/
+	
+	/*ok, marshall operations: */
+	int object_enum=CfrheologybbarabsgradEnum;
+	marshallhandle->call(object_enum);
+
+	marshallhandle->call(this->definitionenum);
+	marshallhandle->call(this->name);
+	marshallhandle->call(this->weights_enum);
+	marshallhandle->call(this->timepassedflag);
+	marshallhandle->call(this->misfit);
+} 
+/*}}}*/
+int Cfrheologybbarabsgrad::ObjectEnum(void){/*{{{*/
+	return CfrheologybbarabsgradEnum;
+}
+/*}}}*/
+/*Definition virtual function resolutoin: */
+int Cfrheologybbarabsgrad::DefinitionEnum(){/*{{{*/
+	return this->definitionenum;
+}
+/*}}}*/
+char* Cfrheologybbarabsgrad::Name(){/*{{{*/
+	char* name2=xNew<char>(strlen(this->name)+1);
+	xMemCpy(name2,this->name,strlen(this->name)+1);
+
+	return name2;
+}
+/*}}}*/
+IssmDouble Cfrheologybbarabsgrad::Response(FemModel* femmodel){/*{{{*/
+
+	/*recover parameters: */
+	IssmDouble J=0.;
+	IssmDouble J_sum=0.;
+
+	for(Object* & object : femmodel->elements->objects){
+		Element* element=xDynamicCast<Element*>(object);
+		J+=this->Cfrheologybbarabsgrad_Calculation(element,weights_enum);
+	}
+
+	ISSM_MPI_Allreduce ( (void*)&J,(void*)&J_sum,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
+	ISSM_MPI_Bcast(&J_sum,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());
+	J=J_sum;
+
+	timepassedflag = true;
+	return J;
+}/*}}}*/
+IssmDouble Cfrheologybbarabsgrad::Cfrheologybbarabsgrad_Calculation(Element* element, int weights_enum){/*{{{*/
+
+	int        domaintype,numcomponents;
+	IssmDouble Jelem=0.;
+	IssmDouble misfit,Jdet;
+	IssmDouble dp[2],weight;
+	IssmDouble* xyz_list = NULL;
+
+	/*Get basal element*/
+	if(!element->IsOnBase()) return 0.;
+
+	/*If on water, return 0: */
+	if(!element->IsIceInElement()) return 0.;
+
+	/*Get problem dimension*/
+	element->FindParam(&domaintype,DomainTypeEnum);
+	switch(domaintype){
+		case Domain2DverticalEnum:   numcomponents   = 1; break;
+		case Domain3DEnum:           numcomponents   = 2; break;
+		case Domain2DhorizontalEnum: numcomponents   = 2; break;
+		default: _error_("not supported yet");
+	}
+
+	/*Spawn surface element*/
+	Element* basalelement = element->SpawnBasalElement();
+
+	/* Get node coordinates*/
+	basalelement->GetVerticesCoordinates(&xyz_list);
+
+	/*Get input if it already exists*/
+	DatasetInput *datasetinput = basalelement->GetDatasetInput(definitionenum);  _assert_(datasetinput);
+	Input* rheologyb_input=basalelement->GetInput(MaterialsRheologyBbarEnum);                  _assert_(rheologyb_input);
+
+	/* Start  looping on the number of gaussian points: */
+	Gauss* gauss=basalelement->NewGauss(2);
+	while(gauss->next()){
+
+		/* Get Jacobian determinant: */
+		basalelement->JacobianDeterminant(&Jdet,xyz_list,gauss);
+
+		/*Get all parameters at gaussian point*/
+		datasetinput->GetInputValue(&weight,gauss,WeightsSurfaceObservationEnum);
+		rheologyb_input->GetInputDerivativeValue(&dp[0],xyz_list,gauss);
+
+		/*Add to cost function*/
+		Jelem+=weight*.5*dp[0]*dp[0]*Jdet*gauss->weight;
+		if(numcomponents==2) Jelem+=weight*.5*dp[1]*dp[1]*Jdet*gauss->weight;
+	}
+
+	/*clean up and Return: */
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
+	xDelete<IssmDouble>(xyz_list);
+	delete gauss;
+	return Jelem;
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Cfrheologybbarabsgrad.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Cfrheologybbarabsgrad.h	(revision 27686)
+++ /issm/trunk-jpl/src/c/classes/Cfrheologybbarabsgrad.h	(revision 27686)
@@ -0,0 +1,45 @@
+/*!\file Cfrheologybbarabsgrad.h
+ * \brief: header file for Cfrheologybbarabsgrad object
+ */
+
+#ifndef _CFRHEOLOGYBBARABSGRAD_H_
+#define _CFRHEOLOGYBBARABSGRAD_H_
+
+/*Headers:*/
+#include "./Definition.h"
+#include "./FemModel.h"
+
+IssmDouble OutputDefinitionsResponsex(FemModel* femmodel,int output_enum);
+void  GetVectorFromInputsx( IssmDouble** pvector, int* pvector_size, FemModel* femmodel,int name);
+
+class Cfrheologybbarabsgrad: public Object, public Definition{
+
+	public: 
+
+		int         definitionenum;
+		char*       name;
+		int         weights_enum;
+		bool			timepassedflag;
+
+		IssmDouble  misfit; //value carried over in time.
+
+		/*Cfrheologybbarabsgrad constructors, destructors :*/
+		Cfrheologybbarabsgrad();
+		Cfrheologybbarabsgrad(char* in_name, int in_definitionenum, int in_weights_enum,  bool timepassedflag);
+		~Cfrheologybbarabsgrad();
+
+		/*Object virtual function resolutoin: */
+		Object* copy();
+		void DeepEcho(void);
+		void Echo(void);
+		int Id(void);
+		void Marshall(MarshallHandle* marshallhandle);
+		int ObjectEnum(void);
+
+		/*Definition virtual function resolutoin: */
+		int DefinitionEnum();
+		char* Name();
+		IssmDouble Response(FemModel* femmodel);
+		IssmDouble Cfrheologybbarabsgrad_Calculation(Element* element, int weights_enum);
+};
+#endif  /* _CFRHEOLOGYBBARABSGRAD_H_ */
Index: /issm/trunk-jpl/src/c/classes/classes.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/classes.h	(revision 27685)
+++ /issm/trunk-jpl/src/c/classes/classes.h	(revision 27686)
@@ -25,4 +25,5 @@
 #include "./Cfsurfacesquare.h"
 #include "./Cfdragcoeffabsgrad.h"
+#include "./Cfrheologybbarabsgrad.h"
 #include "./Cfsurfacelogvel.h"
 #include "./Cflevelsetmisfit.h"
Index: /issm/trunk-jpl/src/c/datastructures/DataSet.cpp
===================================================================
--- /issm/trunk-jpl/src/c/datastructures/DataSet.cpp	(revision 27685)
+++ /issm/trunk-jpl/src/c/datastructures/DataSet.cpp	(revision 27686)
@@ -271,4 +271,9 @@
 				this->AddObject(cfdragcoeff);
 			}
+			else if(obj_enum==CfrheologybbarabsgradEnum){
+				Cfrheologybbarabsgrad* cfrheologybbarabsgrad=new Cfrheologybbarabsgrad();
+				cfrheologybbarabsgrad->Marshall(marshallhandle);
+				this->AddObject(cfrheologybbarabsgrad);
+			}
 			else if(obj_enum==NodalvalueEnum){
 				Nodalvalue* nodalvalue=new Nodalvalue();
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 27685)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 27686)
@@ -306,4 +306,65 @@
 				/*}}}*/
 			}
+			else if (output_definition_enums[i]==CfrheologybbarabsgradEnum){
+				/*Deal with cfrheologybbarabsgrad: {{{*/
+
+				/*cfrheologybbarabsgrad variables: */
+				int          num_cfrheologybbarabsgrads;
+				char**       cfrheologybbarabsgrad_name_s                = NULL;
+				char**       cfrheologybbarabsgrad_definitionstring_s    = NULL;
+				IssmDouble** cfrheologybbarabsgrad_weights_s             = NULL;
+				int*         cfrheologybbarabsgrad_weights_M_s           = NULL;
+				int*         cfrheologybbarabsgrad_weights_N_s           = NULL;
+				char**       cfrheologybbarabsgrad_weights_string_s      = NULL;
+
+				/*Fetch name, model_string, observation, observation_string, etc ... (see src/m/classes/cfrheologybbarabsgrad.m): */
+				iomodel->FetchMultipleData(&cfrheologybbarabsgrad_name_s,&num_cfrheologybbarabsgrads,                                                        "md.cfrheologybbarabsgrad.name");
+				iomodel->FetchMultipleData(&cfrheologybbarabsgrad_definitionstring_s,&num_cfrheologybbarabsgrads,                                            "md.cfrheologybbarabsgrad.definitionstring");
+				iomodel->FetchMultipleData(&cfrheologybbarabsgrad_weights_s,&cfrheologybbarabsgrad_weights_M_s,&cfrheologybbarabsgrad_weights_N_s,&num_cfrheologybbarabsgrads,             "md.cfrheologybbarabsgrad.weights");
+				iomodel->FetchMultipleData(&cfrheologybbarabsgrad_weights_string_s,&num_cfrheologybbarabsgrads,                                              "md.cfrheologybbarabsgrad.weights_string");
+
+				for(j=0;j<num_cfrheologybbarabsgrads;j++){
+
+					int weight_vector_type=0;
+					if ((cfrheologybbarabsgrad_weights_M_s[j]==iomodel->numberofvertices) || (cfrheologybbarabsgrad_weights_M_s[j]==iomodel->numberofvertices+1)){
+						weight_vector_type=1;
+					}
+					else if ((cfrheologybbarabsgrad_weights_M_s[j]==iomodel->numberofelements) || (cfrheologybbarabsgrad_weights_M_s[j]==iomodel->numberofelements+1)){
+						weight_vector_type=2;
+					}
+					else
+					 _error_("cfrheologybbarabsgrad weight size not supported yet");
+
+					/*First create a cfrheologybbarabsgrad object for that specific string (cfrheologybbarabsgrad_model_string_s[j]):*/
+					output_definitions->AddObject(new Cfrheologybbarabsgrad(cfrheologybbarabsgrad_name_s[j],StringToEnumx(cfrheologybbarabsgrad_definitionstring_s[j]),StringToEnumx(cfrheologybbarabsgrad_weights_string_s[j]),false));
+
+					/*Now, for this particular cfrheologybbarabsgrad object, make sure we plug into the elements: the observation, and the weights.*/
+					for(Object* & object : elements->objects){
+
+						Element* element=xDynamicCast<Element*>(object);
+
+						element->DatasetInputAdd(StringToEnumx(cfrheologybbarabsgrad_definitionstring_s[j]),cfrheologybbarabsgrad_weights_s[j],inputs,iomodel,cfrheologybbarabsgrad_weights_M_s[j],cfrheologybbarabsgrad_weights_N_s[j],weight_vector_type,StringToEnumx(cfrheologybbarabsgrad_weights_string_s[j]),7,WeightsSurfaceObservationEnum);
+
+					}
+
+				}
+				    /*Free ressources:*/
+            for(j=0;j<num_cfrheologybbarabsgrads;j++){
+               char* string=NULL;
+               IssmDouble* matrix = NULL;
+
+               string = cfrheologybbarabsgrad_definitionstring_s[j];    xDelete<char>(string);
+               string = cfrheologybbarabsgrad_weights_string_s[j];      xDelete<char>(string);
+               string = cfrheologybbarabsgrad_name_s[j];    xDelete<char>(string);
+               matrix = cfrheologybbarabsgrad_weights_s[j]; xDelete<IssmDouble>(matrix);
+            }
+            xDelete<char*>(cfrheologybbarabsgrad_name_s);
+            xDelete<char*>(cfrheologybbarabsgrad_definitionstring_s);
+            xDelete<IssmDouble*>(cfrheologybbarabsgrad_weights_s);
+            xDelete<int>(cfrheologybbarabsgrad_weights_M_s);
+            xDelete<int>(cfrheologybbarabsgrad_weights_N_s);
+            xDelete<char*>(cfrheologybbarabsgrad_weights_string_s);
+            /*}}}*/
+         }
 			else if (output_definition_enums[i]==CfsurfacelogvelEnum){
 				/*Deal with cfsurfacelogvel: {{{*/
Index: /issm/trunk-jpl/src/c/shared/Enum/Enum.vim
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 27685)
+++ /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 27686)
@@ -1388,4 +1388,5 @@
 syn keyword cConstant CalvingPollardEnum
 syn keyword cConstant CfdragcoeffabsgradEnum
+syn keyword cConstant CfrheologybbarabsgradEnum
 syn keyword cConstant CfsurfacelogvelEnum
 syn keyword cConstant CfsurfacesquareEnum
@@ -1764,4 +1765,5 @@
 syn keyword cType Cfsurfacesquare
 syn keyword cType Channel
+syn keyword cType classes
 syn keyword cType Constraint
 syn keyword cType Constraints
@@ -1770,6 +1772,6 @@
 syn keyword cType ControlInput
 syn keyword cType Covertree
+syn keyword cType DatasetInput
 syn keyword cType DataSetParam
-syn keyword cType DatasetInput
 syn keyword cType Definition
 syn keyword cType DependentObject
@@ -1784,6 +1786,6 @@
 syn keyword cType ElementInput
 syn keyword cType ElementMatrix
+syn keyword cType Elements
 syn keyword cType ElementVector
-syn keyword cType Elements
 syn keyword cType ExponentialVariogram
 syn keyword cType ExternalResult
@@ -1792,9 +1794,10 @@
 syn keyword cType Friction
 syn keyword cType Gauss
+syn keyword cType GaussianVariogram
+syn keyword cType gaussobjects
 syn keyword cType GaussPenta
 syn keyword cType GaussSeg
 syn keyword cType GaussTetra
 syn keyword cType GaussTria
-syn keyword cType GaussianVariogram
 syn keyword cType GenericExternalResult
 syn keyword cType GenericOption
@@ -1813,4 +1816,5 @@
 syn keyword cType IssmDirectApplicInterface
 syn keyword cType IssmParallelDirectApplicInterface
+syn keyword cType krigingobjects
 syn keyword cType Load
 syn keyword cType Loads
@@ -1823,4 +1827,5 @@
 syn keyword cType Matice
 syn keyword cType Matlitho
+syn keyword cType matrixobjects
 syn keyword cType MatrixParam
 syn keyword cType Misfit
@@ -1835,6 +1840,6 @@
 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
@@ -1850,11 +1855,11 @@
 syn keyword cType Regionaloutput
 syn keyword cType Results
+syn keyword cType Riftfront
 syn keyword cType RiftStruct
-syn keyword cType Riftfront
 syn keyword cType SealevelGeometry
 syn keyword cType Seg
 syn keyword cType SegInput
+syn keyword cType Segment
 syn keyword cType SegRef
-syn keyword cType Segment
 syn keyword cType SpcDynamic
 syn keyword cType SpcStatic
@@ -1875,8 +1880,4 @@
 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 AdjointBalancethickness2Analysis
 syn keyword cType AdjointBalancethicknessAnalysis
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 27685)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 27686)
@@ -1387,4 +1387,5 @@
 	CalvingPollardEnum,
 	CfdragcoeffabsgradEnum,
+	CfrheologybbarabsgradEnum,
 	CfsurfacelogvelEnum,
 	CfsurfacesquareEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 27685)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 27686)
@@ -1390,4 +1390,5 @@
 		case CalvingPollardEnum : return "CalvingPollard";
 		case CfdragcoeffabsgradEnum : return "Cfdragcoeffabsgrad";
+		case CfrheologybbarabsgradEnum : return "Cfrheologybbarabsgrad";
 		case CfsurfacelogvelEnum : return "Cfsurfacelogvel";
 		case CfsurfacesquareEnum : return "Cfsurfacesquare";
Index: /issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim	(revision 27685)
+++ /issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim	(revision 27686)
@@ -1381,4 +1381,5 @@
 syn keyword juliaConstC CalvingPollardEnum
 syn keyword juliaConstC CfdragcoeffabsgradEnum
+syn keyword juliaConstC CfrheologybbarabsgradEnum
 syn keyword juliaConstC CfsurfacelogvelEnum
 syn keyword juliaConstC CfsurfacesquareEnum
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 27685)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 27686)
@@ -752,10 +752,10 @@
 	      else if (strcmp(name,"BasalStress")==0) return BasalStressEnum;
 	      else if (strcmp(name,"Base")==0) return BaseEnum;
-	      else if (strcmp(name,"BaseOld")==0) return BaseOldEnum;
-	      else if (strcmp(name,"BaseSlopeX")==0) return BaseSlopeXEnum;
          else stage=7;
    }
    if(stage==7){
-	      if (strcmp(name,"BaseSlopeY")==0) return BaseSlopeYEnum;
+	      if (strcmp(name,"BaseOld")==0) return BaseOldEnum;
+	      else if (strcmp(name,"BaseSlopeX")==0) return BaseSlopeXEnum;
+	      else if (strcmp(name,"BaseSlopeY")==0) return BaseSlopeYEnum;
 	      else if (strcmp(name,"BaselineBasalforcingsFloatingiceMeltingRate")==0) return BaselineBasalforcingsFloatingiceMeltingRateEnum;
 	      else if (strcmp(name,"BaselineBasalforcingsSpatialDeepwaterMeltingRate")==0) return BaselineBasalforcingsSpatialDeepwaterMeltingRateEnum;
@@ -834,9 +834,5 @@
 	      else if (strcmp(name,"EsaEmotion")==0) return EsaEmotionEnum;
 	      else if (strcmp(name,"EsaNmotion")==0) return EsaNmotionEnum;
-	      else if (strcmp(name,"EsaStrainratexy")==0) return EsaStrainratexyEnum;
-         else stage=7;
-   }
-   if(stage==7){
-	      if (strcmp(name,"EsaRotationrate")==0) return EsaRotationrateEnum;
+	      else if (strcmp(name,"EsaRotationrate")==0) return EsaRotationrateEnum;
 	      else if (strcmp(name,"EsaStrainratexx")==0) return EsaStrainratexxEnum;
 	      else if (strcmp(name,"EsaStrainratexy")==0) return EsaStrainratexyEnum;
@@ -879,10 +875,10 @@
 	      else if (strcmp(name,"HydrologyBasinsId")==0) return HydrologyBasinsIdEnum;
 	      else if (strcmp(name,"HydrologyBumpHeight")==0) return HydrologyBumpHeightEnum;
-	      else if (strcmp(name,"HydrologyBumpSpacing")==0) return HydrologyBumpSpacingEnum;
-	      else if (strcmp(name,"HydrologyChannelConductivity")==0) return HydrologyChannelConductivityEnum;
          else stage=8;
    }
    if(stage==8){
-	      if (strcmp(name,"HydrologydcBasalMoulinInput")==0) return HydrologydcBasalMoulinInputEnum;
+	      if (strcmp(name,"HydrologyBumpSpacing")==0) return HydrologyBumpSpacingEnum;
+	      else if (strcmp(name,"HydrologyChannelConductivity")==0) return HydrologyChannelConductivityEnum;
+	      else if (strcmp(name,"HydrologydcBasalMoulinInput")==0) return HydrologydcBasalMoulinInputEnum;
 	      else if (strcmp(name,"HydrologydcEplThickness")==0) return HydrologydcEplThicknessEnum;
 	      else if (strcmp(name,"HydrologydcEplThicknessOld")==0) return HydrologydcEplThicknessOldEnum;
@@ -966,9 +962,5 @@
 	      else if (strcmp(name,"RadarAttenuationMacGregor")==0) return RadarAttenuationMacGregorEnum;
 	      else if (strcmp(name,"RadarAttenuationWolff")==0) return RadarAttenuationWolffEnum;
-	      else if (strcmp(name,"RadarPowerWolff")==0) return RadarPowerWolffEnum;
-         else stage=8;
-   }
-   if(stage==8){
-	      if (strcmp(name,"RadarIcePeriod")==0) return RadarIcePeriodEnum;
+	      else if (strcmp(name,"RadarIcePeriod")==0) return RadarIcePeriodEnum;
 	      else if (strcmp(name,"RadarPowerMacGregor")==0) return RadarPowerMacGregorEnum;
 	      else if (strcmp(name,"RadarPowerWolff")==0) return RadarPowerWolffEnum;
@@ -1006,10 +998,10 @@
 	      else if (strcmp(name,"SealevelBarystaticOceanMask")==0) return SealevelBarystaticOceanMaskEnum;
 	      else if (strcmp(name,"SealevelBarystaticOceanWeights")==0) return SealevelBarystaticOceanWeightsEnum;
-	      else if (strcmp(name,"SealevelBarystaticOceanArea")==0) return SealevelBarystaticOceanAreaEnum;
-	      else if (strcmp(name,"SealevelBarystaticOceanLatbar")==0) return SealevelBarystaticOceanLatbarEnum;
          else stage=9;
    }
    if(stage==9){
-	      if (strcmp(name,"SealevelBarystaticOceanLongbar")==0) return SealevelBarystaticOceanLongbarEnum;
+	      if (strcmp(name,"SealevelBarystaticOceanArea")==0) return SealevelBarystaticOceanAreaEnum;
+	      else if (strcmp(name,"SealevelBarystaticOceanLatbar")==0) return SealevelBarystaticOceanLatbarEnum;
+	      else if (strcmp(name,"SealevelBarystaticOceanLongbar")==0) return SealevelBarystaticOceanLongbarEnum;
 	      else if (strcmp(name,"SealevelBarystaticOceanLoad")==0) return SealevelBarystaticOceanLoadEnum;
 	      else if (strcmp(name,"SealevelNEsa")==0) return SealevelNEsaEnum;
@@ -1099,9 +1091,5 @@
 	      else if (strcmp(name,"SmbDswrf")==0) return SmbDswrfEnum;
 	      else if (strcmp(name,"SmbDswdiffrf")==0) return SmbDswdiffrfEnum;
-	      else if (strcmp(name,"SmbDzMin")==0) return SmbDzMinEnum;
-         else stage=9;
-   }
-   if(stage==9){
-	      if (strcmp(name,"SmbDzAdd")==0) return SmbDzAddEnum;
+	      else if (strcmp(name,"SmbDzAdd")==0) return SmbDzAddEnum;
 	      else if (strcmp(name,"SmbDz")==0) return SmbDzEnum;
 	      else if (strcmp(name,"SmbDzMin")==0) return SmbDzMinEnum;
@@ -1133,10 +1121,10 @@
 	      else if (strcmp(name,"SmbMassBalanceTransient")==0) return SmbMassBalanceTransientEnum;
 	      else if (strcmp(name,"SmbMask")==0) return SmbMaskEnum;
-	      else if (strcmp(name,"SmbMeanLHF")==0) return SmbMeanLHFEnum;
-	      else if (strcmp(name,"SmbMeanSHF")==0) return SmbMeanSHFEnum;
          else stage=10;
    }
    if(stage==10){
-	      if (strcmp(name,"SmbMeanULW")==0) return SmbMeanULWEnum;
+	      if (strcmp(name,"SmbMeanLHF")==0) return SmbMeanLHFEnum;
+	      else if (strcmp(name,"SmbMeanSHF")==0) return SmbMeanSHFEnum;
+	      else if (strcmp(name,"SmbMeanULW")==0) return SmbMeanULWEnum;
 	      else if (strcmp(name,"SmbMelt")==0) return SmbMeltEnum;
 	      else if (strcmp(name,"SmbMonthlytemperatures")==0) return SmbMonthlytemperaturesEnum;
@@ -1243,9 +1231,5 @@
 	      else if (strcmp(name,"ThicknessAbsMisfit")==0) return ThicknessAbsMisfitEnum;
 	      else if (strcmp(name,"ThicknessAcrossGradient")==0) return ThicknessAcrossGradientEnum;
-	      else if (strcmp(name,"ThicknessOld")==0) return ThicknessOldEnum;
-         else stage=10;
-   }
-   if(stage==10){
-	      if (strcmp(name,"ThicknessAlongGradient")==0) return ThicknessAlongGradientEnum;
+	      else if (strcmp(name,"ThicknessAlongGradient")==0) return ThicknessAlongGradientEnum;
 	      else if (strcmp(name,"Thickness")==0) return ThicknessEnum;
 	      else if (strcmp(name,"ThicknessOld")==0) return ThicknessOldEnum;
@@ -1260,10 +1244,10 @@
 	      else if (strcmp(name,"VxMesh")==0) return VxMeshEnum;
 	      else if (strcmp(name,"VxObs")==0) return VxObsEnum;
-	      else if (strcmp(name,"VxShear")==0) return VxShearEnum;
-	      else if (strcmp(name,"VxSurface")==0) return VxSurfaceEnum;
          else stage=11;
    }
    if(stage==11){
-	      if (strcmp(name,"VyAverage")==0) return VyAverageEnum;
+	      if (strcmp(name,"VxShear")==0) return VxShearEnum;
+	      else if (strcmp(name,"VxSurface")==0) return VxSurfaceEnum;
+	      else if (strcmp(name,"VyAverage")==0) return VyAverageEnum;
 	      else if (strcmp(name,"VyBase")==0) return VyBaseEnum;
 	      else if (strcmp(name,"VyDebris")==0) return VyDebrisEnum;
@@ -1375,8 +1359,5 @@
 	      else if (strcmp(name,"Outputdefinition81")==0) return Outputdefinition81Enum;
 	      else if (strcmp(name,"Outputdefinition82")==0) return Outputdefinition82Enum;
-         else stage=11;
-   }
-   if(stage==11){
-	      if (strcmp(name,"Outputdefinition83")==0) return Outputdefinition83Enum;
+	      else if (strcmp(name,"Outputdefinition83")==0) return Outputdefinition83Enum;
 	      else if (strcmp(name,"Outputdefinition84")==0) return Outputdefinition84Enum;
 	      else if (strcmp(name,"Outputdefinition85")==0) return Outputdefinition85Enum;
@@ -1386,13 +1367,13 @@
 	      else if (strcmp(name,"Outputdefinition89")==0) return Outputdefinition89Enum;
 	      else if (strcmp(name,"Outputdefinition8")==0) return Outputdefinition8Enum;
-	      else if (strcmp(name,"Outputdefinition90")==0) return Outputdefinition90Enum;
+         else stage=12;
+   }
+   if(stage==12){
+	      if (strcmp(name,"Outputdefinition90")==0) return Outputdefinition90Enum;
 	      else if (strcmp(name,"Outputdefinition91")==0) return Outputdefinition91Enum;
 	      else if (strcmp(name,"Outputdefinition92")==0) return Outputdefinition92Enum;
 	      else if (strcmp(name,"Outputdefinition93")==0) return Outputdefinition93Enum;
 	      else if (strcmp(name,"Outputdefinition94")==0) return Outputdefinition94Enum;
-         else stage=12;
-   }
-   if(stage==12){
-	      if (strcmp(name,"Outputdefinition95")==0) return Outputdefinition95Enum;
+	      else if (strcmp(name,"Outputdefinition95")==0) return Outputdefinition95Enum;
 	      else if (strcmp(name,"Outputdefinition96")==0) return Outputdefinition96Enum;
 	      else if (strcmp(name,"Outputdefinition97")==0) return Outputdefinition97Enum;
@@ -1442,4 +1423,5 @@
 	      else if (strcmp(name,"CalvingPollard")==0) return CalvingPollardEnum;
 	      else if (strcmp(name,"Cfdragcoeffabsgrad")==0) return CfdragcoeffabsgradEnum;
+	      else if (strcmp(name,"Cfrheologybbarabsgrad")==0) return CfrheologybbarabsgradEnum;
 	      else if (strcmp(name,"Cfsurfacelogvel")==0) return CfsurfacelogvelEnum;
 	      else if (strcmp(name,"Cfsurfacesquare")==0) return CfsurfacesquareEnum;
@@ -1503,13 +1485,13 @@
 	      else if (strcmp(name,"FSvelocity")==0) return FSvelocityEnum;
 	      else if (strcmp(name,"FemModel")==0) return FemModelEnum;
-         else stage=12;
-   }
-   if(stage==12){
-	      if (strcmp(name,"FileParam")==0) return FileParamEnum;
+	      else if (strcmp(name,"FileParam")==0) return FileParamEnum;
 	      else if (strcmp(name,"FixedTimestepping")==0) return FixedTimesteppingEnum;
 	      else if (strcmp(name,"FloatingArea")==0) return FloatingAreaEnum;
 	      else if (strcmp(name,"FloatingAreaScaled")==0) return FloatingAreaScaledEnum;
 	      else if (strcmp(name,"FloatingMeltRate")==0) return FloatingMeltRateEnum;
-	      else if (strcmp(name,"Free")==0) return FreeEnum;
+         else stage=13;
+   }
+   if(stage==13){
+	      if (strcmp(name,"Free")==0) return FreeEnum;
 	      else if (strcmp(name,"FreeSurfaceBaseAnalysis")==0) return FreeSurfaceBaseAnalysisEnum;
 	      else if (strcmp(name,"FreeSurfaceTopAnalysis")==0) return FreeSurfaceTopAnalysisEnum;
@@ -1517,8 +1499,5 @@
 	      else if (strcmp(name,"FrontalForcingsRignot")==0) return FrontalForcingsRignotEnum;
 	      else if (strcmp(name,"FrontalForcingsRignotarma")==0) return FrontalForcingsRignotarmaEnum;
-         else stage=13;
-   }
-   if(stage==13){
-	      if (strcmp(name,"Fset")==0) return FsetEnum;
+	      else if (strcmp(name,"Fset")==0) return FsetEnum;
 	      else if (strcmp(name,"FullMeltOnPartiallyFloating")==0) return FullMeltOnPartiallyFloatingEnum;
 	      else if (strcmp(name,"GLheightadvectionAnalysis")==0) return GLheightadvectionAnalysisEnum;
@@ -1634,7 +1613,7 @@
 	      else if (strcmp(name,"MaxVx")==0) return MaxVxEnum;
 	      else if (strcmp(name,"MaxVy")==0) return MaxVyEnum;
-         else stage=13;
+         else stage=14;
    }
-   if(stage==13){
+   if(stage==14){
 	      if (strcmp(name,"MaxVz")==0) return MaxVzEnum;
 	      else if (strcmp(name,"Melange")==0) return MelangeEnum;
@@ -1643,8 +1622,5 @@
 	      else if (strcmp(name,"MeshX")==0) return MeshXEnum;
 	      else if (strcmp(name,"MeshY")==0) return MeshYEnum;
-         else stage=14;
-   }
-   if(stage==14){
-	      if (strcmp(name,"MinVel")==0) return MinVelEnum;
+	      else if (strcmp(name,"MinVel")==0) return MinVelEnum;
 	      else if (strcmp(name,"MinVx")==0) return MinVxEnum;
 	      else if (strcmp(name,"MinVy")==0) return MinVyEnum;
@@ -1760,17 +1736,14 @@
 	      else if (strcmp(name,"StringExternalResult")==0) return StringExternalResultEnum;
 	      else if (strcmp(name,"StringParam")==0) return StringParamEnum;
-	      else if (strcmp(name,"SubelementFriction1")==0) return SubelementFriction1Enum;
-         else stage=14;
+         else stage=15;
    }
-   if(stage==14){
-	      if (strcmp(name,"SubelementFriction2")==0) return SubelementFriction2Enum;
+   if(stage==15){
+	      if (strcmp(name,"SubelementFriction1")==0) return SubelementFriction1Enum;
+	      else if (strcmp(name,"SubelementFriction2")==0) return SubelementFriction2Enum;
 	      else if (strcmp(name,"SubelementMelt1")==0) return SubelementMelt1Enum;
 	      else if (strcmp(name,"SubelementMelt2")==0) return SubelementMelt2Enum;
 	      else if (strcmp(name,"SubelementMigration")==0) return SubelementMigrationEnum;
 	      else if (strcmp(name,"SurfaceSlopeSolution")==0) return SurfaceSlopeSolutionEnum;
-         else stage=15;
-   }
-   if(stage==15){
-	      if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
+	      else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
 	      else if (strcmp(name,"Tetra")==0) return TetraEnum;
 	      else if (strcmp(name,"TetraInput")==0) return TetraInputEnum;
