Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 26983)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 26984)
@@ -273,6 +273,4 @@
 	this->ComputeSigmaVM();
 
-	IssmDouble  calvingratex[NUMVERTICES];
-	IssmDouble  calvingratey[NUMVERTICES];
 	IssmDouble  calvingrate[NUMVERTICES];
 	IssmDouble  vx,vy;
@@ -317,22 +315,19 @@
 		/*Assign values*/
 		if(bed>sealevel){
-			calvingratex[iv]=0.;
-			calvingratey[iv]=0.;
+			calvingrate[iv] = 0.;
 		}
 		else{
-			calvingratex[iv]=vx*sigma_vm/sigma_max;
-			calvingratey[iv]=vy*sigma_vm/sigma_max;
-		}
-		calvingrate[iv] =sqrt(calvingratex[iv]*calvingratex[iv] + calvingratey[iv]*calvingratey[iv]);
+			calvingrate[iv] = sqrt(vx*vx+vy*vy)*sigma_vm/sigma_max;
+		}
 	}
 
 	/*Add input*/
-	this->AddBasalInput(CalvingratexEnum,&calvingratex[0],P1DGEnum);
-	this->AddBasalInput(CalvingrateyEnum,&calvingratey[0],P1DGEnum);
 	this->AddBasalInput(CalvingCalvingrateEnum,&calvingrate[0],P1DGEnum);
-
+	this->CalvingFromRate();
+
+	/*Extrude*/
+	this->InputExtrude(CalvingCalvingrateEnum,-1);
 	this->InputExtrude(CalvingratexEnum,-1);
 	this->InputExtrude(CalvingrateyEnum,-1);
-	this->InputExtrude(CalvingCalvingrateEnum,-1);
 }
 /*}}}*/
@@ -2871,5 +2866,6 @@
 }
 /*}}}*/
-void	   Penta::MovingFrontalVelocity(void){/*{{{*/
+void	      Penta::MovingFrontalVelocity(void){/*{{{*/
+
 	if(!this->IsOnBase()) return;
 	int        domaintype, calvinglaw, i;
@@ -2902,7 +2898,4 @@
 		case DefaultCalvingEnum:
 		case CalvingVonmisesEnum:
-			calvingrate_input = this->GetInput(CalvingCalvingrateEnum);     _assert_(calvingrate_input);
-			meltingrate_input = this->GetInput(CalvingMeltingrateEnum);     _assert_(meltingrate_input);
-			break;
 		case CalvingLevermannEnum:
 			calvingratex_input=this->GetInput(CalvingratexEnum); _assert_(calvingratex_input);
@@ -2941,27 +2934,11 @@
 			case DefaultCalvingEnum:
 			case CalvingVonmisesEnum:
-				calvingrate_input->GetInputValue(&calvingrate,&gauss);
-				meltingrate_input->GetInputValue(&meltingrate,&gauss);
-
-				if(groundedice<0) meltingrate = 0.;
-
-				if(norm_dlsf>1.e-10)
-				 for(i=0;i<dim;i++){
-					 c[i]=calvingrate*dlsf[i]/norm_dlsf; m[i]=meltingrate*dlsf[i]/norm_dlsf;
-				 }
-				else
-				 for(i=0;i<dim;i++){
-					 c[i]=0.; m[i]=0.;
-				 }
-				break;
-
 			case CalvingLevermannEnum:
 				calvingratex_input->GetInputValue(&c[0],&gauss);
 				calvingratey_input->GetInputValue(&c[1],&gauss);
 				meltingrate_input->GetInputValue(&meltingrate,&gauss);
-				norm_calving=0.;
-				for(i=0;i<dim;i++) norm_calving+=pow(c[i],2);
-				norm_calving=sqrt(norm_calving)+1.e-14;
-				for(i=0;i<dim;i++) m[i]=meltingrate*c[i]/norm_calving;
+				if(groundedice<0) meltingrate = 0.;
+				m[0]=meltingrate*dlsf[0]/norm_dlsf;
+				m[1]=meltingrate*dlsf[1]/norm_dlsf;
 				break;
 
@@ -3036,5 +3013,4 @@
 	this->AddInput(MovingFrontalVxEnum,&movingfrontvx[0],P1DGEnum);
 	this->AddInput(MovingFrontalVyEnum,&movingfrontvy[0],P1DGEnum);
-
 	this->InputExtrude(MovingFrontalVxEnum,-1);
 	this->InputExtrude(MovingFrontalVyEnum,-1);
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 26983)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 26984)
@@ -317,6 +317,4 @@
 
 	/*Now compute calving rate*/
-	IssmDouble  calvingratex[NUMVERTICES];
-	IssmDouble  calvingratey[NUMVERTICES];
 	IssmDouble  calvingrate[NUMVERTICES];
 	IssmDouble  sigma_vm,vx,vy;
@@ -325,12 +323,12 @@
 
 	/*Retrieve all inputs and parameters we will need*/
-	Input* vx_input = this->GetInput(VxEnum); _assert_(vx_input);
-	Input* vy_input = this->GetInput(VyEnum); _assert_(vy_input);
-	Input* gr_input = this->GetInput(MaskOceanLevelsetEnum); _assert_(gr_input);
-	Input* bs_input = this->GetInput(BaseEnum);                    _assert_(bs_input);
-	Input* smax_fl_input = this->GetInput(CalvingStressThresholdFloatingiceEnum); _assert_(smax_fl_input);
-	Input* smax_gr_input = this->GetInput(CalvingStressThresholdGroundediceEnum); _assert_(smax_gr_input);
-	Input* sl_input  = this->GetInput(SealevelEnum); _assert_(sl_input);
-	Input* sigma_vm_input  = this->GetInput(SigmaVMEnum); _assert_(sigma_vm_input);
+	Input* vx_input       = this->GetInput(VxEnum); _assert_(vx_input);
+	Input* vy_input       = this->GetInput(VyEnum); _assert_(vy_input);
+	Input* gr_input       = this->GetInput(MaskOceanLevelsetEnum); _assert_(gr_input);
+	Input* bs_input       = this->GetInput(BaseEnum);                    _assert_(bs_input);
+	Input* smax_fl_input  = this->GetInput(CalvingStressThresholdFloatingiceEnum); _assert_(smax_fl_input);
+	Input* smax_gr_input  = this->GetInput(CalvingStressThresholdGroundediceEnum); _assert_(smax_gr_input);
+	Input* sl_input       = this->GetInput(SealevelEnum); _assert_(sl_input);
+	Input* sigma_vm_input = this->GetInput(SigmaVMEnum); _assert_(sigma_vm_input);
 
 	/* Start looping on the number of vertices: */
@@ -354,20 +352,17 @@
 		else
 		 sigma_max = sigma_max_grounded;
+
 		/*Assign values*/
 		if(bed>sealevel){
-			calvingratex[iv]=0.;
-			calvingratey[iv]=0.;
+			calvingrate[iv] = 0.;
 		}
 		else{
-			calvingratex[iv]=vx*sigma_vm/sigma_max;
-			calvingratey[iv]=vy*sigma_vm/sigma_max;
-		}
-		calvingrate[iv] =sqrt(calvingratex[iv]*calvingratex[iv] + calvingratey[iv]*calvingratey[iv]);
+			calvingrate[iv] = sqrt(vx*vx+vy*vy)*sigma_vm/sigma_max;
+		}
 	}
 
 	/*Add input*/
-	this->AddInput(CalvingratexEnum,&calvingratex[0],P1DGEnum);
-	this->AddInput(CalvingrateyEnum,&calvingratey[0],P1DGEnum);
 	this->AddInput(CalvingCalvingrateEnum,&calvingrate[0],P1DGEnum);
+   this->CalvingFromRate();
 }
 /*}}}*/
@@ -4289,8 +4284,8 @@
 	IssmDouble norm_dlsf, norm_calving, calvingrate, meltingrate, groundedice;
 	IssmDouble migrationmax, calvinghaf, heaviside, haf_eps;
-	IssmDouble  xyz_list[NUMVERTICES][3];
-	IssmDouble  movingfrontvx[NUMVERTICES];
-	IssmDouble  movingfrontvy[NUMVERTICES];
-	IssmDouble  vel;
+	IssmDouble xyz_list[NUMVERTICES][3];
+	IssmDouble movingfrontvx[NUMVERTICES];
+	IssmDouble movingfrontvy[NUMVERTICES];
+	IssmDouble vel;
 
 	/* Get node coordinates and dof list: */
@@ -4326,10 +4321,7 @@
 	switch(calvinglaw){
 		case DefaultCalvingEnum:
+		case CalvingVonmisesEnum:
 			calvingratex_input=this->GetInput(CalvingratexEnum); _assert_(calvingratex_input);
 			calvingratey_input=this->GetInput(CalvingrateyEnum); _assert_(calvingratey_input);
-			meltingrate_input = this->GetInput(CalvingMeltingrateEnum);     _assert_(meltingrate_input);
-			break;
-		case CalvingVonmisesEnum:
-			calvingrate_input = this->GetInput(CalvingCalvingrateEnum);     _assert_(calvingrate_input);
 			meltingrate_input = this->GetInput(CalvingMeltingrateEnum);     _assert_(meltingrate_input);
 			break;
@@ -4389,4 +4381,5 @@
 		switch(calvinglaw){
 			case DefaultCalvingEnum:
+			case CalvingVonmisesEnum:
 				calvingratex_input->GetInputValue(&c[0],&gauss);
 				calvingratey_input->GetInputValue(&c[1],&gauss);
@@ -4401,18 +4394,4 @@
 					}
 				}
-				break;
-			case CalvingVonmisesEnum:
-				calvingrate_input->GetInputValue(&calvingrate,&gauss);
-				meltingrate_input->GetInputValue(&meltingrate,&gauss);
-				if(groundedice<0) meltingrate = 0.;
-
-				if(norm_dlsf>1.e-10)
-				 for(i=0;i<dim;i++){
-					 c[i]=calvingrate*dlsf[i]/norm_dlsf; m[i]=meltingrate*dlsf[i]/norm_dlsf;
-				 }
-				else
-				 for(i=0;i<dim;i++){
-					 c[i]=0.; m[i]=0.;
-				 }
 				break;
 
