Index: /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 27025)
+++ /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 27026)
@@ -197,7 +197,7 @@
 			break;
 		case CalvingTestEnum:
-			iomodel->FetchData(&transparam,&N,&M,"md.calving.speedfactor");
 			iomodel->FindConstant(&interp,"md.timestepping.interp_forcing");
 			iomodel->FindConstant(&cycle,"md.timestepping.cycle_forcing");
+			iomodel->FetchData(&transparam,&N,&M,"md.calving.speedfactor");
 			if(N==1){
 				_assert_(M==1);
@@ -207,4 +207,14 @@
             _assert_(N==2);
             parameters->AddObject(new TransientParam(CalvingTestSpeedfactorEnum,&transparam[0],&transparam[M],interp,cycle,M));
+         }
+			xDelete<IssmDouble>(transparam);
+			iomodel->FetchData(&transparam,&N,&M,"md.calving.independentrate");
+			if(N==1){
+				_assert_(M==1);
+				parameters->AddObject(new DoubleParam(CalvingTestIndependentRateEnum,transparam[0]));
+         }
+         else{
+            _assert_(N==2);
+            parameters->AddObject(new TransientParam(CalvingTestIndependentRateEnum,&transparam[0],&transparam[M],interp,cycle,M));
          }
 			xDelete<IssmDouble>(transparam);
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 27025)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 27026)
@@ -372,14 +372,18 @@
 	IssmDouble  calvingratey[NUMVERTICES];
 	IssmDouble  calvingrate[NUMVERTICES];
-	IssmDouble  vx,vy;
+	IssmDouble  vx,vy,vel;
+	IssmDouble  dphidx, dphidy, dphi;
 	IssmDouble  time;
-	IssmDouble  coeff;
+	IssmDouble  coeff, indrate;
 
 	/*Retrieve all inputs and parameters we will need*/
 	parameters->FindParam(&time,TimeEnum);
 	parameters->FindParam(&coeff,CalvingTestSpeedfactorEnum,time);
+	parameters->FindParam(&indrate,CalvingTestIndependentRateEnum,time);
 
 	Input* vx_input = this->GetInput(VxEnum); _assert_(vx_input);
 	Input* vy_input = this->GetInput(VyEnum); _assert_(vy_input);
+	Input *lsf_slopex_input  = this->GetInput(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input);
+   Input *lsf_slopey_input  = this->GetInput(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input);
 
 	/* Start looping on the number of vertices: */
@@ -392,8 +396,13 @@
 		vy_input->GetInputValue(&vy,&gauss);
 
-		calvingratex[iv]= coeff*vx;
-		calvingratey[iv]= coeff*vy;
+		lsf_slopex_input->GetInputValue(&dphidx,&gauss);
+      lsf_slopey_input->GetInputValue(&dphidy,&gauss);
+
+      vel=sqrt(vx*vx + vy*vy) + 1e-14;
+      dphi=sqrt(dphidx*dphidx+dphidy*dphidy)+ 1e-14;
+
+		calvingratex[iv]= coeff*vx + indrate*dphidx/dphi;
+		calvingratey[iv]= coeff*vy + indrate*dphidy/dphi;
 		calvingrate[iv] = sqrt(calvingratex[iv]*calvingratex[iv] + calvingratey[iv]*calvingratey[iv]);
-
 	}
 
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 27025)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 27026)
@@ -107,4 +107,5 @@
 	CalvingMinthicknessEnum,
 	CalvingTestSpeedfactorEnum,
+	CalvingTestIndependentRateEnum,
 	CalvingUseParamEnum,
 	CalvingScaleThetaEnum,
Index: /issm/trunk-jpl/src/m/classes/calvingtest.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/calvingtest.m	(revision 27025)
+++ /issm/trunk-jpl/src/m/classes/calvingtest.m	(revision 27026)
@@ -7,4 +7,5 @@
 	properties (SetAccess=public)
 		speedfactor = 1;
+		independentrate = 0;
 	end
 	methods
@@ -31,4 +32,5 @@
 		function self = setdefaultparameters(self) % {{{
 			self.speedfactor = 1;
+			self.independentrate = 0;
 		end % }}}
 		function md = checkconsistency(self,md,solution,analyses) % {{{
@@ -36,8 +38,10 @@
 			if (~strcmp(solution,'TransientSolution') | md.transient.ismovingfront==0), return; end
 			md = checkfield(md,'fieldname','calving.speedfactor','>=',0,'NaN',1,'Inf',1, 'singletimeseries', 1);
+			md = checkfield(md,'fieldname','calving.independentrate','NaN',1,'Inf',1, 'singletimeseries', 1);
 		end % }}}
 		function disp(self) % {{{
 			disp(sprintf('   Calving test parameters:'));
 			fielddisplay(self,'speedfactor','calving rate is proportional to the ice velocity (e.g. speedfactor=1 -> calving front should not move)');
+			fielddisplay(self,'independentrate','calving rate is independent of the ice velocity.');
 		end % }}}
 		function marshall(self,prefix,md,fid) % {{{
@@ -45,4 +49,5 @@
 			WriteData(fid,prefix,'name','md.calving.law','data',8,'format','Integer');
 			WriteData(fid,prefix,'object',self,'fieldname','speedfactor','format','DoubleMat','mattype',1,'timeserieslength',2,'yts',md.constants.yts);
+			WriteData(fid,prefix,'object',self,'fieldname','independentrate','format','DoubleMat','mattype',1,'timeserieslength',2,'yts',md.constants.yts,'scale',1./yts);
 		end % }}}
 	end
