Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16145)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16146)
@@ -1006,5 +1006,5 @@
 	/*Computeportion of the element that is grounded*/ 
 
-	int         normal_orientation=0;
+	int         normal_orientation;
 	IssmDouble  s1,s2;
 	IssmDouble  levelset[NUMVERTICES];
@@ -1013,10 +1013,10 @@
 	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]);
@@ -1029,10 +1029,10 @@
 		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]);
@@ -1045,10 +1045,10 @@
 		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]);
@@ -1061,5 +1061,5 @@
 		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];
@@ -1071,5 +1071,5 @@
 		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];
@@ -1081,5 +1081,5 @@
 		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];
@@ -1451,5 +1451,5 @@
 
 	/*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
@@ -1567,5 +1567,5 @@
 					break;
 				case MaterialsRheologyBbarEnum:
-				case MaterialsRheologyZbarEnum:
+				case MaterialsRheologyDbarEnum:
 					/*Material will take care of it*/ break;
 				default:
@@ -1767,4 +1767,5 @@
 void  Tria::InputUpdateFromVector(IssmDouble* vector, int name, int type){
 
+
 	/*Check that name is an element input*/
 	if (!IsInput(name)) return;
@@ -1780,5 +1781,5 @@
 		}
 		/*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));
 		}
@@ -1793,5 +1794,5 @@
 		}
 		/*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));
 		}
@@ -1961,5 +1962,5 @@
 				name==FrictionCoefficientEnum ||
 				name==MaterialsRheologyBbarEnum ||
-				name==MaterialsRheologyZbarEnum ||
+				name==MaterialsRheologyDbarEnum ||
 				name==GradientEnum ||
 				name==OldGradientEnum ||
@@ -2793,7 +2794,5 @@
 			*presponse=this->material->GetBbar();
 			break;
-		case MaterialsRheologyZbarEnum:
-			*presponse=this->material->GetZbar();
-			break;
+
 		case VelEnum:{
 
@@ -3731,5 +3730,5 @@
 	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);
 		}
@@ -3758,5 +3757,5 @@
 	Input* input=NULL;
 
-	if(enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsRheologyZbarEnum){
+	if(enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsRheologyDbarEnum){
 		input=(Input*)material->inputs->GetInput(enum_type);
 	}
@@ -3776,5 +3775,5 @@
 	Input* input=NULL;
 
-	if(enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsRheologyZbarEnum){
+	if(enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsRheologyDbarEnum){
 		input=(Input*)material->inputs->GetInput(enum_type);
 	}
@@ -3795,5 +3794,5 @@
 	Input* input=NULL;
 
-	if(enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsRheologyZbarEnum){
+	if(enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsRheologyDbarEnum){
 		input=(Input*)material->inputs->GetInput(enum_type);
 	}
@@ -3826,6 +3825,6 @@
 			GradjBSSA(gradient,control_index);
 			break;
-		case MaterialsRheologyZbarEnum:
-			GradjZSSA(gradient,control_index);
+		case MaterialsRheologyDbarEnum:
+			GradjDSSA(gradient,control_index);
 			break;
 		case BalancethicknessThickeningRateEnum:
@@ -3919,44 +3918,4 @@
 }
 /*}}}*/
-/*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){
@@ -4016,6 +3975,6 @@
 }
 /*}}}*/
-/*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*/
@@ -4024,5 +3983,5 @@
 	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];
@@ -4040,5 +3999,5 @@
 	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: */
@@ -4049,5 +4008,4 @@
 
 		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);
@@ -4056,5 +4014,5 @@
 
 		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);
@@ -5421,5 +5379,5 @@
 
 	/*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);
 	}
@@ -5456,5 +5414,5 @@
 	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);
 	}
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16145)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16146)
@@ -139,7 +139,7 @@
 		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);
Index: /issm/trunk-jpl/src/c/classes/Materials/Matdamageice.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Materials/Matdamageice.cpp	(revision 16145)
+++ /issm/trunk-jpl/src/c/classes/Materials/Matdamageice.cpp	(revision 16146)
@@ -161,12 +161,22 @@
 }
 /*}}}*/
+/*FUNCTION Matdamageice::GetD {{{*/
+IssmDouble Matdamageice::GetD(){
+
+	/*Output*/
+	IssmDouble D;
+
+	inputs->GetInputAverage(&D,MaterialsRheologyDEnum);
+	return D;
+}
+/*}}}*/
 /*FUNCTION Matdamageice::GetZ {{{*/
 IssmDouble Matdamageice::GetZ(){
 
 	/*Output*/
-	IssmDouble Z;
-
-	inputs->GetInputAverage(&Z,MaterialsRheologyZEnum);
-	return Z;
+	IssmDouble D;
+
+	inputs->GetInputAverage(&D,MaterialsRheologyDEnum);
+	return 1/(1-D);
 }
 /*}}}*/
@@ -175,8 +185,16 @@
 
 	/*Output*/
-	IssmDouble Zbar;
-
-	inputs->GetInputAverage(&Zbar,MaterialsRheologyZbarEnum);
-	return Zbar;
+	IssmDouble Dbar;
+	inputs->GetInputAverage(&Dbar,MaterialsRheologyDbarEnum);
+	return 1/(1-Dbar);
+}
+/*}}}*/
+/*FUNCTION Matdamageice::GetDbar {{{*/
+IssmDouble Matdamageice::GetDbar(){
+
+	/*Output*/
+	IssmDouble Dbar;
+	inputs->GetInputAverage(&Dbar,MaterialsRheologyDbarEnum);
+	return Dbar;
 }
 /*}}}*/
@@ -216,5 +234,5 @@
 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]
@@ -235,11 +253,11 @@
 	/*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){
@@ -284,5 +302,5 @@
 	/*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]
@@ -303,10 +321,10 @@
 	/*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){
@@ -355,5 +373,5 @@
 	/*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]
@@ -374,5 +392,5 @@
 	/*Intermediaries: */
 	IssmDouble A,e;
-	IssmDouble B,n,Z;
+	IssmDouble B,n,D;
 	IssmDouble eps0;
 
@@ -380,6 +398,6 @@
 	eps0=pow(10.,(IssmDouble)-27);
 	n=GetN();
-	Z=GetZ();
-	B=Z*GetB();
+	D=GetD();
+	B=(1-D)*GetB();
 
 	if (n==1){
@@ -480,10 +498,10 @@
 }
 /*}}}*/
-/*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]
 	 *
@@ -515,14 +533,14 @@
 		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);
 	}
 
@@ -530,5 +548,5 @@
 	_assert_(B>0);
 	_assert_(n>0);
-	_assert_(viscosity_complement>0);
+	_assert_(viscosity_complement<0);
 
 	/*Return: */
@@ -779,8 +797,8 @@
 		}
 
-		/*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));
 		}
 
@@ -799,11 +817,11 @@
 						}
 						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;
@@ -837,8 +855,8 @@
 		}
 
-		/*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));
 		}
 
@@ -857,11 +875,11 @@
 						}
 						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;
@@ -885,6 +903,6 @@
 				name==MaterialsRheologyBbarEnum ||
 				name==MaterialsRheologyNEnum ||
-				name==MaterialsRheologyZEnum ||
-				name==MaterialsRheologyZbarEnum
+				name==MaterialsRheologyDEnum ||
+				name==MaterialsRheologyDbarEnum
 		){
 		return true;
Index: /issm/trunk-jpl/src/c/classes/Materials/Matdamageice.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Materials/Matdamageice.h	(revision 16145)
+++ /issm/trunk-jpl/src/c/classes/Materials/Matdamageice.h	(revision 16146)
@@ -50,5 +50,5 @@
 		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);
@@ -59,5 +59,7 @@
 		IssmDouble GetN();
 		IssmDouble GetZ();
+		IssmDouble GetD();
 		IssmDouble GetZbar();
+		IssmDouble GetDbar();
 		bool   IsInput(int name);
 		/*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Materials/Material.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Materials/Material.h	(revision 16145)
+++ /issm/trunk-jpl/src/c/classes/Materials/Material.h	(revision 16146)
@@ -30,5 +30,5 @@
 		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;
@@ -39,5 +39,7 @@
 		virtual IssmDouble GetN()=0;
 		virtual IssmDouble GetZ()=0;
+		virtual IssmDouble GetD()=0;
 		virtual IssmDouble GetZbar()=0;
+		virtual IssmDouble GetDbar()=0;
 
 };
Index: /issm/trunk-jpl/src/c/classes/Materials/Matice.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Materials/Matice.h	(revision 16145)
+++ /issm/trunk-jpl/src/c/classes/Materials/Matice.h	(revision 16146)
@@ -57,5 +57,5 @@
 		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);
@@ -65,5 +65,7 @@
 		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: /issm/trunk-jpl/src/c/classes/Materials/Matpar.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 16145)
+++ /issm/trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 16146)
@@ -87,5 +87,5 @@
 		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");};
@@ -95,6 +95,8 @@
 		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: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 16145)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 16146)
@@ -40,5 +40,5 @@
 			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");
 		}
@@ -59,4 +59,4 @@
 
 	/*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: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 16145)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 16146)
@@ -64,5 +64,5 @@
 			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;
@@ -73,5 +73,5 @@
 	/*Free data: */
 	iomodel->DeleteData(8,MeshUpperelementsEnum,MeshLowerelementsEnum,
-				MaterialsRheologyBEnum,MaterialsRheologyNEnum,MaterialsRheologyZEnum,InversionControlParametersEnum,InversionMinParametersEnum,
+				MaterialsRheologyBEnum,MaterialsRheologyNEnum,MaterialsRheologyDEnum,InversionControlParametersEnum,InversionMinParametersEnum,
 				InversionMaxParametersEnum);
 
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 16145)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Stressbalance/UpdateElementsStressbalance.cpp	(revision 16146)
@@ -102,5 +102,5 @@
 	iomodel->FetchDataToInput(elements,LoadingforceYEnum);
 	if(materials_type==MatdamageiceEnum){
-		iomodel->FetchDataToInput(elements,MaterialsRheologyZEnum);
+		iomodel->FetchDataToInput(elements,MaterialsRheologyDEnum);
 	}
 	if(iomodel->dim==3){
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16145)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 16146)
@@ -154,4 +154,6 @@
 	MaterialsRheologyZEnum,
 	MaterialsRheologyZbarEnum,
+	MaterialsRheologyDEnum,
+	MaterialsRheologyDbarEnum,
 	MaterialsRhoIceEnum,
 	MaterialsRhoWaterEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16145)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 16146)
@@ -162,4 +162,6 @@
 		case MaterialsRheologyZEnum : return "MaterialsRheologyZ";
 		case MaterialsRheologyZbarEnum : return "MaterialsRheologyZbar";
+		case MaterialsRheologyDEnum : return "MaterialsRheologyD";
+		case MaterialsRheologyDbarEnum : return "MaterialsRheologyDbar";
 		case MaterialsRhoIceEnum : return "MaterialsRhoIce";
 		case MaterialsRhoWaterEnum : return "MaterialsRhoWater";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16145)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 16146)
@@ -165,4 +165,6 @@
 	      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;
@@ -258,10 +260,10 @@
 	      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;
@@ -381,10 +383,10 @@
 	      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;
@@ -504,10 +506,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,"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;
Index: /issm/trunk-jpl/src/m/classes/inversion.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/inversion.m	(revision 16145)
+++ /issm/trunk-jpl/src/m/classes/inversion.m	(revision 16146)
@@ -116,5 +116,5 @@
 			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);
Index: /issm/trunk-jpl/src/m/classes/inversion.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/inversion.py	(revision 16145)
+++ /issm/trunk-jpl/src/m/classes/inversion.py	(revision 16146)
@@ -124,5 +124,5 @@
 		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)
Index: /issm/trunk-jpl/src/m/classes/matdamageice.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/matdamageice.m	(revision 16145)
+++ /issm/trunk-jpl/src/m/classes/matdamageice.m	(revision 16146)
@@ -19,5 +19,5 @@
 		rheology_B   = NaN;
 		rheology_n   = NaN;
-		rheology_Z   = NaN;
+		rheology_D   = NaN;
 		rheology_law = '';
 
@@ -101,5 +101,5 @@
 			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'});
 
@@ -128,5 +128,5 @@
 			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]');
@@ -151,5 +151,5 @@
 			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');
 
Index: /issm/trunk-jpl/src/m/classes/matdamageice.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/matdamageice.py	(revision 16145)
+++ /issm/trunk-jpl/src/m/classes/matdamageice.py	(revision 16146)
@@ -27,5 +27,5 @@
 		self.rheology_B   = float('NaN')
 		self.rheology_n   = float('NaN')
-		self.rheology_Z   = float('NaN')
+		self.rheology_D   = float('NaN')
 		self.rheology_law = ''
 
@@ -58,5 +58,5 @@
 		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]")
@@ -119,5 +119,5 @@
 		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]);
@@ -143,5 +143,5 @@
 		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')
 
Index: /issm/trunk-jpl/src/m/enum/EnumDefinitions.py
===================================================================
--- /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16145)
+++ /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 16146)
@@ -154,4 +154,6 @@
 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]
Index: /issm/trunk-jpl/src/m/enum/MaterialsRheologyDEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/MaterialsRheologyDEnum.m	(revision 16146)
+++ /issm/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: /issm/trunk-jpl/src/m/enum/MaterialsRheologyDbarEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/MaterialsRheologyDbarEnum.m	(revision 16146)
+++ /issm/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: /issm/trunk-jpl/test/NightlyRun/test270.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test270.m	(revision 16145)
+++ /issm/trunk-jpl/test/NightlyRun/test270.m	(revision 16146)
@@ -5,5 +5,5 @@
 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: /issm/trunk-jpl/test/NightlyRun/test270.py
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test270.py	(revision 16145)
+++ /issm/trunk-jpl/test/NightlyRun/test270.py	(revision 16146)
@@ -17,5 +17,5 @@
 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: /issm/trunk-jpl/test/NightlyRun/test272.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test272.m	(revision 16145)
+++ /issm/trunk-jpl/test/NightlyRun/test272.m	(revision 16146)
@@ -5,12 +5,13 @@
 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);
@@ -26,10 +27,10 @@
 
 %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),...
Index: /issm/trunk-jpl/test/NightlyRun/test272.py
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test272.py	(revision 16145)
+++ /issm/trunk-jpl/test/NightlyRun/test272.py	(revision 16146)
@@ -17,10 +17,10 @@
 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))
@@ -38,10 +38,10 @@
 
 #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,\
Index: /issm/trunk-jpl/test/NightlyRun/test274.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test274.m	(revision 16145)
+++ /issm/trunk-jpl/test/NightlyRun/test274.m	(revision 16146)
@@ -6,5 +6,5 @@
 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');
 
Index: /issm/trunk-jpl/test/NightlyRun/test274.py
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test274.py	(revision 16145)
+++ /issm/trunk-jpl/test/NightlyRun/test274.py	(revision 16146)
@@ -19,5 +19,5 @@
 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')
 
