Index: /issm/trunk-jpl/src/c/classes/Elements/Element.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 18193)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 18194)
@@ -41,4 +41,129 @@
 	this->inputs->AddInput(input_in);
 }/*}}}*/
+void       Element::ComputeNewDamage(){/*{{{*/
+
+	IssmDouble *xyz_list=NULL;
+	IssmDouble  eps_xx,eps_xy,eps_yy,eps_xz,eps_yz,eps_zz,eps_eff;
+	IssmDouble  epsmin=1.e-27;
+	int         dim;
+
+	/*Retrieve all inputs we will be needing: */
+	/* TODO: retrieve parameters eps_0 and eps_f and input DamageD(bar?) */
+	this->GetVerticesCoordinates(&xyz_list);
+	this->ComputeStrainRate();
+	parameters->FindParam(&dim,DomainDimensionEnum);
+	Input* eps_xx_input=this->GetInput(StrainRatexxEnum); _assert_(eps_xx_input);
+	Input* eps_yy_input=this->GetInput(StrainRateyyEnum); _assert_(eps_yy_input);
+	Input* eps_xy_input=this->GetInput(StrainRatexyEnum); _assert_(eps_xy_input);
+	Input* eps_xz_input=NULL;
+	Input* eps_yz_input=NULL;
+	Input* eps_zz_input=NULL;
+	if(dim==3){
+		eps_xz_input=this->GetInput(StrainRatexzEnum); _assert_(eps_xz_input);
+		eps_yz_input=this->GetInput(StrainRateyzEnum); _assert_(eps_yz_input);
+		eps_zz_input=this->GetInput(StrainRatezzEnum); _assert_(eps_zz_input);
+	}
+
+	/* Start looping on the number of vertices: */
+	Gauss* gauss=this->NewGauss();
+	int numvertices = this->GetNumberOfVertices();
+	for (int iv=0;iv<numvertices;iv++){
+		gauss->GaussVertex(iv);
+
+		eps_xx_input->GetInputValue(&eps_xx,gauss);
+		eps_yy_input->GetInputValue(&eps_yy,gauss);
+		eps_xy_input->GetInputValue(&eps_xy,gauss);
+		if(dim==3){
+			eps_xz_input->GetInputValue(&eps_xz,gauss);
+			eps_yz_input->GetInputValue(&eps_yz,gauss);
+			eps_zz_input->GetInputValue(&eps_zz,gauss);
+		}
+		else{eps_xz=0; eps_yz=0; eps_zz=0;}
+
+		/* eps_eff^2 = exx^2 + eyy^2 + exy^2 + exz^2 + eyz^2 + exx*eyy */
+		eps_eff=sqrt(eps_xx*eps_xx+eps_yy*eps_yy+eps_xy*eps_xy+eps_xz*eps_xz+eps_yz*eps_yz+eps_xx*eps_xx*epsmin*epsmin);
+
+		/*TODO: compute kappa from initial D, then compute new D */
+
+	}
+
+	/* TODO: add newdamage input to DamageEnum and NewDamageEnum */
+
+	/*Clean up and return*/
+	xDelete<IssmDouble>(xyz_list);
+	delete gauss;
+
+}/*}}}*/
+void       Element::ComputeStrainRate(){/*{{{*/
+
+	int         dim;
+	IssmDouble *xyz_list = NULL;
+	IssmDouble  epsilon[6];
+
+	/*Retrieve all inputs we will be needing: */
+	this->GetVerticesCoordinates(&xyz_list);
+	parameters->FindParam(&dim,DomainDimensionEnum);
+	Input* vx_input=this->GetInput(VxEnum); _assert_(vx_input);
+	Input* vy_input=this->GetInput(VyEnum); _assert_(vy_input);
+	Input* vz_input=NULL;
+	if(dim==3){vz_input=this->GetInput(VzEnum); _assert_(vz_input);}
+
+	/*Allocate arrays*/
+	int numvertices = this->GetNumberOfVertices();
+	IssmDouble* eps_xx = xNew<IssmDouble>(numvertices);
+	IssmDouble* eps_yy = xNew<IssmDouble>(numvertices);
+	IssmDouble* eps_zz = xNew<IssmDouble>(numvertices);
+	IssmDouble* eps_xy = xNew<IssmDouble>(numvertices);
+	IssmDouble* eps_xz = xNew<IssmDouble>(numvertices);
+	IssmDouble* eps_yz = xNew<IssmDouble>(numvertices);
+
+	/* Start looping on the number of vertices: */
+	Gauss* gauss=this->NewGauss();
+	for (int iv=0;iv<numvertices;iv++){
+		gauss->GaussVertex(iv);
+
+		/*Compute strain rate viscosity and pressure: */
+		if(dim==2)
+		 this->StrainRateSSA(&epsilon[0],xyz_list,gauss,vx_input,vy_input);
+		else
+		 this->StrainRateFS(&epsilon[0],xyz_list,gauss,vx_input,vy_input,vz_input);
+
+		if(dim==2){
+			 /* epsilon=[exx,eyy,exy];*/
+			eps_xx[iv]=epsilon[0]; 
+			eps_yy[iv]=epsilon[1];
+			eps_xy[iv]=epsilon[2];
+		}
+		else{
+			/*epsilon=[exx eyy ezz exy exz eyz]*/
+			eps_xx[iv]=epsilon[0]; 
+			eps_yy[iv]=epsilon[1];
+			eps_zz[iv]=epsilon[2];
+			eps_xy[iv]=epsilon[3]; 
+			eps_xz[iv]=epsilon[4];
+			eps_yz[iv]=epsilon[5];
+		}
+	}
+
+	/*Add Stress tensor components into inputs*/
+	this->AddInput(StrainRatexxEnum,eps_xx,P1Enum);
+	this->AddInput(StrainRatexyEnum,eps_xy,P1Enum);
+	this->AddInput(StrainRatexzEnum,eps_xz,P1Enum);
+	this->AddInput(StrainRateyyEnum,eps_yy,P1Enum);
+	this->AddInput(StrainRateyzEnum,eps_yz,P1Enum);
+	this->AddInput(StrainRatezzEnum,eps_zz,P1Enum);
+
+	/*Clean up and return*/
+	delete gauss;
+	xDelete<IssmDouble>(xyz_list);
+	xDelete<IssmDouble>(eps_xx);
+	xDelete<IssmDouble>(eps_yy);
+	xDelete<IssmDouble>(eps_zz);
+	xDelete<IssmDouble>(eps_xy);
+	xDelete<IssmDouble>(eps_xz);
+	xDelete<IssmDouble>(eps_yz);
+
+}
+/*}}}*/
 void       Element::CoordinateSystemTransform(IssmDouble** ptransform,Node** nodes_list,int numnodes,int* cs_array){/*{{{*/
 
@@ -113,75 +238,4 @@
 	/*Assign output pointer*/
 	*ptransform=transform;
-}
-/*}}}*/
-void       Element::ComputeStrainRate(){/*{{{*/
-
-	int         dim;
-	IssmDouble *xyz_list = NULL;
-	IssmDouble  epsilon[6];
-
-	/*Retrieve all inputs we will be needing: */
-	this->GetVerticesCoordinates(&xyz_list);
-	parameters->FindParam(&dim,DomainDimensionEnum);
-	Input* vx_input=this->GetInput(VxEnum); _assert_(vx_input);
-	Input* vy_input=this->GetInput(VyEnum); _assert_(vy_input);
-	Input* vz_input=NULL;
-	if(dim==3){vz_input=this->GetInput(VzEnum); _assert_(vz_input);}
-
-	/*Allocate arrays*/
-	int numvertices = this->GetNumberOfVertices();
-	IssmDouble* eps_xx = xNew<IssmDouble>(numvertices);
-	IssmDouble* eps_yy = xNew<IssmDouble>(numvertices);
-	IssmDouble* eps_zz = xNew<IssmDouble>(numvertices);
-	IssmDouble* eps_xy = xNew<IssmDouble>(numvertices);
-	IssmDouble* eps_xz = xNew<IssmDouble>(numvertices);
-	IssmDouble* eps_yz = xNew<IssmDouble>(numvertices);
-
-	/* Start looping on the number of vertices: */
-	Gauss* gauss=this->NewGauss();
-	for (int iv=0;iv<numvertices;iv++){
-		gauss->GaussVertex(iv);
-
-		/*Compute strain rate viscosity and pressure: */
-		if(dim==2)
-		 this->StrainRateSSA(&epsilon[0],xyz_list,gauss,vx_input,vy_input);
-		else
-		 this->StrainRateFS(&epsilon[0],xyz_list,gauss,vx_input,vy_input,vz_input);
-
-		if(dim==2){
-			 /* epsilon=[exx,eyy,exy];*/
-			eps_xx[iv]=epsilon[0]; 
-			eps_yy[iv]=epsilon[1];
-			eps_xy[iv]=epsilon[2];
-		}
-		else{
-			/*epsilon=[exx eyy ezz exy exz eyz]*/
-			eps_xx[iv]=epsilon[0]; 
-			eps_yy[iv]=epsilon[1];
-			eps_zz[iv]=epsilon[2];
-			eps_xy[iv]=epsilon[3]; 
-			eps_xz[iv]=epsilon[4];
-			eps_yz[iv]=epsilon[5];
-		}
-	}
-
-	/*Add Stress tensor components into inputs*/
-	this->AddInput(StrainRatexxEnum,eps_xx,P1Enum);
-	this->AddInput(StrainRatexyEnum,eps_xy,P1Enum);
-	this->AddInput(StrainRatexzEnum,eps_xz,P1Enum);
-	this->AddInput(StrainRateyyEnum,eps_yy,P1Enum);
-	this->AddInput(StrainRateyzEnum,eps_yz,P1Enum);
-	this->AddInput(StrainRatezzEnum,eps_zz,P1Enum);
-
-	/*Clean up and return*/
-	delete gauss;
-	xDelete<IssmDouble>(xyz_list);
-	xDelete<IssmDouble>(eps_xx);
-	xDelete<IssmDouble>(eps_yy);
-	xDelete<IssmDouble>(eps_zz);
-	xDelete<IssmDouble>(eps_xy);
-	xDelete<IssmDouble>(eps_xz);
-	xDelete<IssmDouble>(eps_yz);
-
 }
 /*}}}*/
@@ -1053,4 +1107,8 @@
 				input=this->inputs->GetInput(output_enum);
 				break;
+			case NewDamageEnum:
+				this->ComputeNewDamage();
+				input=this->inputs->GetInput(output_enum);
+				break;
 			default:
 				_error_("input "<<EnumToStringx(output_enum)<<" not found in element");
Index: /issm/trunk-jpl/src/c/classes/Elements/Element.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 18193)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 18194)
@@ -59,6 +59,7 @@
 		/* bool       AllActive(void); */
 		/* bool       AnyActive(void); */
+		void       ComputeNewDamage();
+		void       ComputeStrainRate();
 		void       CoordinateSystemTransform(IssmDouble** ptransform,Node** nodes,int numnodes,int* cs_array);
-		void       ComputeStrainRate();
 		void       Echo();
 		void       DeepEcho();
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 18193)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 18194)
@@ -200,4 +200,5 @@
 	DamageEvolutionNumRequestedOutputsEnum,
 	DamageEvolutionRequestedOutputsEnum,
+	NewDamageEnum,
 	MaterialsRhoIceEnum,
 	MaterialsRhoSeawaterEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 18193)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 18194)
@@ -208,4 +208,5 @@
 		case DamageEvolutionNumRequestedOutputsEnum : return "DamageEvolutionNumRequestedOutputs";
 		case DamageEvolutionRequestedOutputsEnum : return "DamageEvolutionRequestedOutputs";
+		case NewDamageEnum : return "NewDamage";
 		case MaterialsRhoIceEnum : return "MaterialsRhoIce";
 		case MaterialsRhoSeawaterEnum : return "MaterialsRhoSeawater";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 18193)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 18194)
@@ -211,4 +211,5 @@
 	      else if (strcmp(name,"DamageEvolutionNumRequestedOutputs")==0) return DamageEvolutionNumRequestedOutputsEnum;
 	      else if (strcmp(name,"DamageEvolutionRequestedOutputs")==0) return DamageEvolutionRequestedOutputsEnum;
+	      else if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
 	      else if (strcmp(name,"MaterialsRhoIce")==0) return MaterialsRhoIceEnum;
 	      else if (strcmp(name,"MaterialsRhoSeawater")==0) return MaterialsRhoSeawaterEnum;
@@ -259,9 +260,9 @@
 	      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 stage=3;
    }
    if(stage==3){
-	      if (strcmp(name,"QmuNumberofresponses")==0) return QmuNumberofresponsesEnum;
+	      if (strcmp(name,"QmuNumberofpartitions")==0) return QmuNumberofpartitionsEnum;
+	      else if (strcmp(name,"QmuNumberofresponses")==0) return QmuNumberofresponsesEnum;
 	      else if (strcmp(name,"QmuPartition")==0) return QmuPartitionEnum;
 	      else if (strcmp(name,"QmuResponsedescriptors")==0) return QmuResponsedescriptorsEnum;
@@ -382,9 +383,9 @@
 	      else if (strcmp(name,"HydrologyDCInefficientAnalysis")==0) return HydrologyDCInefficientAnalysisEnum;
 	      else if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum;
-	      else if (strcmp(name,"HydrologySolution")==0) return HydrologySolutionEnum;
          else stage=4;
    }
    if(stage==4){
-	      if (strcmp(name,"MeltingAnalysis")==0) return MeltingAnalysisEnum;
+	      if (strcmp(name,"HydrologySolution")==0) return HydrologySolutionEnum;
+	      else if (strcmp(name,"MeltingAnalysis")==0) return MeltingAnalysisEnum;
 	      else if (strcmp(name,"MasstransportAnalysis")==0) return MasstransportAnalysisEnum;
 	      else if (strcmp(name,"MasstransportSolution")==0) return MasstransportSolutionEnum;
@@ -505,9 +506,9 @@
 	      else if (strcmp(name,"Fill")==0) return FillEnum;
 	      else if (strcmp(name,"FractionIncrement")==0) return FractionIncrementEnum;
-	      else if (strcmp(name,"Friction")==0) return FrictionEnum;
          else stage=5;
    }
    if(stage==5){
-	      if (strcmp(name,"Internal")==0) return InternalEnum;
+	      if (strcmp(name,"Friction")==0) return FrictionEnum;
+	      else if (strcmp(name,"Internal")==0) return InternalEnum;
 	      else if (strcmp(name,"MassFlux")==0) return MassFluxEnum;
 	      else if (strcmp(name,"MeltingOffset")==0) return MeltingOffsetEnum;
@@ -628,9 +629,9 @@
 	      else if (strcmp(name,"Step")==0) return StepEnum;
 	      else if (strcmp(name,"Time")==0) return TimeEnum;
-	      else if (strcmp(name,"WaterColumnOld")==0) return WaterColumnOldEnum;
          else stage=6;
    }
    if(stage==6){
-	      if (strcmp(name,"Outputdefinition")==0) return OutputdefinitionEnum;
+	      if (strcmp(name,"WaterColumnOld")==0) return WaterColumnOldEnum;
+	      else if (strcmp(name,"Outputdefinition")==0) return OutputdefinitionEnum;
 	      else if (strcmp(name,"OutputdefinitionList")==0) return OutputdefinitionListEnum;
 	      else if (strcmp(name,"Massfluxatgate")==0) return MassfluxatgateEnum;
Index: /issm/trunk-jpl/src/m/enum/EnumDefinitions.py
===================================================================
--- /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 18193)
+++ /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 18194)
@@ -200,4 +200,5 @@
 def DamageEvolutionNumRequestedOutputsEnum(): return StringToEnum("DamageEvolutionNumRequestedOutputs")[0]
 def DamageEvolutionRequestedOutputsEnum(): return StringToEnum("DamageEvolutionRequestedOutputs")[0]
+def NewDamageEnum(): return StringToEnum("NewDamage")[0]
 def MaterialsRhoIceEnum(): return StringToEnum("MaterialsRhoIce")[0]
 def MaterialsRhoSeawaterEnum(): return StringToEnum("MaterialsRhoSeawater")[0]
Index: /issm/trunk-jpl/src/m/enum/NewDamageEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/NewDamageEnum.m	(revision 18194)
+++ /issm/trunk-jpl/src/m/enum/NewDamageEnum.m	(revision 18194)
@@ -0,0 +1,11 @@
+function macro=NewDamageEnum()
+%NEWDAMAGEENUM - Enum of NewDamage
+%
+%   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=NewDamageEnum()
+
+macro=StringToEnum('NewDamage');
Index: /issm/trunk-jpl/src/m/plot/plotmodel.py
===================================================================
--- /issm/trunk-jpl/src/m/plot/plotmodel.py	(revision 18193)
+++ /issm/trunk-jpl/src/m/plot/plotmodel.py	(revision 18194)
@@ -54,6 +54,6 @@
 	if numberofplots:
 		
-		if plt.fignum_exists(figurenumber): 
-			plt.cla()
+		#if plt.fignum_exists(figurenumber): 
+		#	plt.cla()
 
 		#if figsize specified
