Index: issm/trunk-jpl/src/ad/validation/Update/update.m
===================================================================
--- issm/trunk-jpl/src/ad/validation/Update/update.m	(revision 15563)
+++ issm/trunk-jpl/src/ad/validation/Update/update.m	(revision 15564)
@@ -4,5 +4,5 @@
 md=setmask(md,'all','');
 md=parameterize(md,'SquareShelfConstrained.par');
-md=setflowequation(md,'macayeal','all');
+md=setflowequation(md,'SSA','all');
 md.cluster=generic('name',oshostname(),'np',3);
 md.cluster.executionpath=[issmtier() '/src/ad/validation/Validation/'];
Index: issm/trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp
===================================================================
--- issm/trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/analyses/AnalysisConfiguration.cpp	(revision 15564)
@@ -30,5 +30,5 @@
 			analyses[0]=DiagnosticHorizAnalysisEnum;
 			analyses[1]=DiagnosticVertAnalysisEnum;
-			analyses[2]=DiagnosticHutterAnalysisEnum;
+			analyses[2]=DiagnosticSIAAnalysisEnum;
 			analyses[3]=SurfaceSlopeAnalysisEnum;
 			analyses[4]=BedSlopeAnalysisEnum;
@@ -40,5 +40,5 @@
 			analyses[0]=DiagnosticHorizAnalysisEnum;
 			analyses[1]=DiagnosticVertAnalysisEnum;
-			analyses[2]=DiagnosticHutterAnalysisEnum;
+			analyses[2]=DiagnosticSIAAnalysisEnum;
 			analyses[3]=SurfaceSlopeAnalysisEnum;
 			analyses[4]=BedSlopeAnalysisEnum;
@@ -112,5 +112,5 @@
 			analyses[0]=DiagnosticHorizAnalysisEnum;
 			analyses[1]=DiagnosticVertAnalysisEnum;
-			analyses[2]=DiagnosticHutterAnalysisEnum;
+			analyses[2]=DiagnosticSIAAnalysisEnum;
 			analyses[3]=SurfaceSlopeAnalysisEnum;
 			analyses[4]=BedSlopeAnalysisEnum;
Index: issm/trunk-jpl/src/c/analyses/adjointdiagnostic_core.cpp
===================================================================
--- issm/trunk-jpl/src/c/analyses/adjointdiagnostic_core.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/analyses/adjointdiagnostic_core.cpp	(revision 15564)
@@ -13,10 +13,10 @@
 
 	/*parameters: */
-	bool isstokes;
+	bool isFS;
 	bool save_results;
 	bool conserve_loads   = true;
 
 	/*retrieve parameters:*/
-	femmodel->parameters->FindParam(&isstokes,FlowequationIsstokesEnum);
+	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
 	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
 
@@ -39,5 +39,5 @@
 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,AdjointxEnum);
 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,AdjointyEnum);
-		if (isstokes){
+		if (isFS){
 			InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,AdjointzEnum);
 			InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,AdjointpEnum);
Index: issm/trunk-jpl/src/c/analyses/control_core.cpp
===================================================================
--- issm/trunk-jpl/src/c/analyses/control_core.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/analyses/control_core.cpp	(revision 15564)
@@ -24,5 +24,5 @@
 	int        dim;
 	int        solution_type;
-	bool       isstokes;
+	bool       isFS;
 	bool       dakota_analysis = false;
 
@@ -57,5 +57,5 @@
 	femmodel->parameters->FindParam(&dim,MeshDimensionEnum);
 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
-	femmodel->parameters->FindParam(&isstokes,FlowequationIsstokesEnum);
+	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
 	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
 	femmodel->parameters->SetParam(false,SaveResultsEnum);
@@ -67,5 +67,5 @@
 	/*Launch once a complete solution to set up all inputs*/
 	if(VerboseControl()) _printf0_("   preparing initial solution\n");
-	if(isstokes) solutioncore(femmodel);
+	if(isFS) solutioncore(femmodel);
 
 	/*Initialize responses: */
Index: issm/trunk-jpl/src/c/analyses/diagnostic_core.cpp
===================================================================
--- issm/trunk-jpl/src/c/analyses/diagnostic_core.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/analyses/diagnostic_core.cpp	(revision 15564)
@@ -15,5 +15,5 @@
 	bool  dakota_analysis;
 	int   dim;
-	bool  ishutter,ismacayeal,isl1l2,ispattyn,isstokes;
+	bool  isSIA,isSSA,isL1L2,isHO,isFS;
 	bool  conserve_loads    = true;
 	bool  save_results;
@@ -25,9 +25,9 @@
 	/* recover parameters:*/
 	femmodel->parameters->FindParam(&dim,MeshDimensionEnum);
-	femmodel->parameters->FindParam(&ishutter,FlowequationIshutterEnum);
-	femmodel->parameters->FindParam(&ismacayeal,FlowequationIsmacayealEnum);
-	femmodel->parameters->FindParam(&isl1l2,FlowequationIsl1l2Enum);
-	femmodel->parameters->FindParam(&ispattyn,FlowequationIspattynEnum);
-	femmodel->parameters->FindParam(&isstokes,FlowequationIsstokesEnum);
+	femmodel->parameters->FindParam(&isSIA,FlowequationIsSIAEnum);
+	femmodel->parameters->FindParam(&isSSA,FlowequationIsSSAEnum);
+	femmodel->parameters->FindParam(&isL1L2,FlowequationIsL1L2Enum);
+	femmodel->parameters->FindParam(&isHO,FlowequationIsHOEnum);
+	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
 	femmodel->parameters->FindParam(&newton,DiagnosticIsnewtonEnum);
 	femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
@@ -46,6 +46,6 @@
 
 	/*Compute slopes: */
-	if(ishutter) surfaceslope_core(femmodel);
-	if(isstokes){
+	if(isSIA) surfaceslope_core(femmodel);
+	if(isFS){
 		bedslope_core(femmodel);
 		femmodel->SetCurrentConfiguration(DiagnosticHorizAnalysisEnum);
@@ -53,15 +53,15 @@
 	}
 
-	if(ishutter){
-		if(VerboseSolution()) _printf0_("   computing hutter velocities\n");
+	if(isSIA){
+		if(VerboseSolution()) _printf0_("   computing SIA velocities\n");
 
 		/*Take the last velocity into account so that the velocity on the MacAyeal domain is not zero*/
-		if(ismacayeal || isl1l2 || ispattyn ) ResetBoundaryConditions(femmodel,DiagnosticHutterAnalysisEnum);
-		femmodel->SetCurrentConfiguration(DiagnosticHutterAnalysisEnum);
+		if(isSSA || isL1L2 || isHO ) ResetBoundaryConditions(femmodel,DiagnosticSIAAnalysisEnum);
+		femmodel->SetCurrentConfiguration(DiagnosticSIAAnalysisEnum);
 		solutionsequence_linear(femmodel);
-		if(ismacayeal || isl1l2 || ispattyn) ResetBoundaryConditions(femmodel,DiagnosticHorizAnalysisEnum);
+		if(isSSA || isL1L2 || isHO) ResetBoundaryConditions(femmodel,DiagnosticHorizAnalysisEnum);
 	}
 
-	if ((ismacayeal || ispattyn || isl1l2) ^ isstokes){ // ^ = xor
+	if ((isSSA || isHO || isL1L2) ^ isFS){ // ^ = xor
 		if(VerboseSolution()) _printf0_("   computing velocities\n");
 
@@ -73,10 +73,10 @@
 	}
 
-	if ((ismacayeal || isl1l2 || ispattyn) && isstokes){
-		if(VerboseSolution()) _printf0_("   computing coupling betweem lower order models and full-Stokes\n");
-		solutionsequence_stokescoupling_nonlinear(femmodel,conserve_loads);
+	if ((isSSA || isL1L2 || isHO) && isFS){
+		if(VerboseSolution()) _printf0_("   computing coupling betweem lower order models and full-FS\n");
+		solutionsequence_FScoupling_nonlinear(femmodel,conserve_loads);
 	}
 
-	if (dim==3 & (ishutter || ismacayeal || isl1l2 || ispattyn)){
+	if (dim==3 & (isSIA || isSSA || isL1L2 || isHO)){
 		if(VerboseSolution()) _printf0_("   computing vertical velocities\n");
 		femmodel->SetCurrentConfiguration(DiagnosticVertAnalysisEnum);
Index: issm/trunk-jpl/src/c/analyses/objectivefunction.cpp
===================================================================
--- issm/trunk-jpl/src/c/analyses/objectivefunction.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/analyses/objectivefunction.cpp	(revision 15564)
@@ -24,5 +24,5 @@
 	/*parameters: */
 	int        solution_type,analysis_type;
-	bool       isstokes       = false;
+	bool       isFS       = false;
 	bool       conserve_loads = true;
 	FemModel  *femmodel       = NULL;
@@ -32,5 +32,5 @@
 
 	/*Recover parameters: */
-	femmodel->parameters->FindParam(&isstokes,FlowequationIsstokesEnum);
+	femmodel->parameters->FindParam(&isFS,FlowequationIsFSEnum);
 	femmodel->parameters->FindParam(&analysis_type,AnalysisTypeEnum);
 	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
Index: issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15564)
@@ -217,5 +217,5 @@
 	IssmDouble  xyz_list[NUMVERTICES][3];
 	IssmDouble  xyz_list_tria[3][3];
-	IssmDouble  rho_ice,gravity,stokesreconditioning;
+	IssmDouble  rho_ice,gravity,FSreconditioning;
 	IssmDouble  pressure,viscosity,Jdet2d;
 	IssmDouble  bed_normal[3];
@@ -234,8 +234,8 @@
 	/*Check analysis_types*/
 	if (analysis_type!=DiagnosticHorizAnalysisEnum) _error_("Not supported yet!");
-	if (approximation!=StokesApproximationEnum) _error_("Not supported yet!");
+	if (approximation!=FSApproximationEnum) _error_("Not supported yet!");
 
 	/*retrieve some parameters: */
-	this->parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
+	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
 
 	if(!IsOnBed()){
@@ -267,11 +267,11 @@
 		/*Compute strain rate viscosity and pressure: */
 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
-		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
+		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
 		pressure_input->GetInputValue(&pressure,gauss);
 
 		/*Compute Stress*/
-		sigma_xx=2*viscosity*epsilon[0]-pressure*stokesreconditioning; // sigma = nu eps - pressure
-		sigma_yy=2*viscosity*epsilon[1]-pressure*stokesreconditioning;
-		sigma_zz=2*viscosity*epsilon[2]-pressure*stokesreconditioning;
+		sigma_xx=2*viscosity*epsilon[0]-pressure*FSreconditioning; // sigma = nu eps - pressure
+		sigma_yy=2*viscosity*epsilon[1]-pressure*FSreconditioning;
+		sigma_zz=2*viscosity*epsilon[2]-pressure*FSreconditioning;
 		sigma_xy=2*viscosity*epsilon[3];
 		sigma_xz=2*viscosity*epsilon[4];
@@ -415,6 +415,6 @@
 			Ke=CreateKMatrixAdjointHoriz();
 			break;
-		case DiagnosticHutterAnalysisEnum:
-			Ke=CreateKMatrixDiagnosticHutter();
+		case DiagnosticSIAAnalysisEnum:
+			Ke=CreateKMatrixDiagnosticSIA();
 			break;
 		case DiagnosticVertAnalysisEnum:
@@ -546,6 +546,6 @@
 			pe=CreatePVectorDiagnosticHoriz();
 			break;
-		case DiagnosticHutterAnalysisEnum:
-			pe=CreatePVectorDiagnosticHutter();
+		case DiagnosticSIAAnalysisEnum:
+			pe=CreatePVectorDiagnosticSIA();
 			break;
 		case DiagnosticVertAnalysisEnum:
@@ -1190,16 +1190,16 @@
 		int approximation;
 		inputs->GetInputValue(&approximation,ApproximationEnum);
-		if(approximation==StokesApproximationEnum || approximation==NoneApproximationEnum){
-			GetSolutionFromInputsDiagnosticStokes(solution);
-		}
-		else if (approximation==MacAyealApproximationEnum || approximation==PattynApproximationEnum || approximation==HutterApproximationEnum){
+		if(approximation==FSApproximationEnum || approximation==NoneApproximationEnum){
+			GetSolutionFromInputsDiagnosticFS(solution);
+		}
+		else if (approximation==MacAyealApproximationEnum || approximation==HOApproximationEnum || approximation==SIAApproximationEnum){
 			GetSolutionFromInputsDiagnosticHoriz(solution);
 		}
-		else if (approximation==MacAyealPattynApproximationEnum || approximation==PattynStokesApproximationEnum || approximation==MacAyealStokesApproximationEnum){
+		else if (approximation==MacAyealHOApproximationEnum || approximation==HOFSApproximationEnum || approximation==MacAyealFSApproximationEnum){
 			return; //the elements around will create the solution
 		}
 		break;
-	case DiagnosticHutterAnalysisEnum:
-		GetSolutionFromInputsDiagnosticHutter(solution);
+	case DiagnosticSIAAnalysisEnum:
+		GetSolutionFromInputsDiagnosticSIA(solution);
 		break;
 	case DiagnosticVertAnalysisEnum:
@@ -1249,7 +1249,7 @@
 }
 /*}}}*/
-/*FUNCTION Penta::GetStrainRate3dPattyn{{{*/
-void Penta::GetStrainRate3dPattyn(IssmDouble* epsilon,IssmDouble* xyz_list, GaussPenta* gauss, Input* vx_input, Input* vy_input){
-	/*Compute the 3d Blatter/PattynStrain Rate (5 components):
+/*FUNCTION Penta::GetStrainRate3dHO{{{*/
+void Penta::GetStrainRate3dHO(IssmDouble* epsilon,IssmDouble* xyz_list, GaussPenta* gauss, Input* vx_input, Input* vy_input){
+	/*Compute the 3d Blatter/HOStrain Rate (5 components):
 	 *
 	 * epsilon=[exx eyy exy exz eyz]
@@ -1271,6 +1271,6 @@
 
 	/*Get strain rate assuming that epsilon has been allocated*/
-	vx_input->GetVxStrainRate3dPattyn(epsilonvx,xyz_list,gauss);
-	vy_input->GetVyStrainRate3dPattyn(epsilonvy,xyz_list,gauss);
+	vx_input->GetVxStrainRate3dHO(epsilonvx,xyz_list,gauss);
+	vy_input->GetVyStrainRate3dHO(epsilonvy,xyz_list,gauss);
 
 	/*Sum all contributions*/
@@ -1973,24 +1973,24 @@
 			this->inputs->AddInput(new IntInput(ApproximationEnum,MacAyealApproximationEnum));
 		}
-		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==PattynApproximationEnum){
-			this->inputs->AddInput(new IntInput(ApproximationEnum,PattynApproximationEnum));
-		}
-		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==MacAyealPattynApproximationEnum){
-			this->inputs->AddInput(new IntInput(ApproximationEnum,MacAyealPattynApproximationEnum));
-		}
-		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==HutterApproximationEnum){
-			this->inputs->AddInput(new IntInput(ApproximationEnum,HutterApproximationEnum));
+		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==HOApproximationEnum){
+			this->inputs->AddInput(new IntInput(ApproximationEnum,HOApproximationEnum));
+		}
+		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==MacAyealHOApproximationEnum){
+			this->inputs->AddInput(new IntInput(ApproximationEnum,MacAyealHOApproximationEnum));
+		}
+		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==SIAApproximationEnum){
+			this->inputs->AddInput(new IntInput(ApproximationEnum,SIAApproximationEnum));
 		}
 		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==L1L2ApproximationEnum){
 			this->inputs->AddInput(new IntInput(ApproximationEnum,L1L2ApproximationEnum));
 		}
-		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==StokesApproximationEnum){
-			this->inputs->AddInput(new IntInput(ApproximationEnum,StokesApproximationEnum));
-		}
-		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==MacAyealStokesApproximationEnum){
-			this->inputs->AddInput(new IntInput(ApproximationEnum,MacAyealStokesApproximationEnum));
-		}
-		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==PattynStokesApproximationEnum){
-			this->inputs->AddInput(new IntInput(ApproximationEnum,PattynStokesApproximationEnum));
+		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==FSApproximationEnum){
+			this->inputs->AddInput(new IntInput(ApproximationEnum,FSApproximationEnum));
+		}
+		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==MacAyealFSApproximationEnum){
+			this->inputs->AddInput(new IntInput(ApproximationEnum,MacAyealFSApproximationEnum));
+		}
+		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==HOFSApproximationEnum){
+			this->inputs->AddInput(new IntInput(ApproximationEnum,HOFSApproximationEnum));
 		}
 		else if (iomodel->Data(FlowequationElementEquationEnum)[index]==NoneApproximationEnum){
@@ -2031,6 +2031,6 @@
 		InputUpdateFromSolutionDiagnosticHoriz( solution);
 		break;
-	case DiagnosticHutterAnalysisEnum:
-		InputUpdateFromSolutionDiagnosticHutter( solution);
+	case DiagnosticSIAAnalysisEnum:
+		InputUpdateFromSolutionDiagnosticSIA( solution);
 		break;
 	case DiagnosticVertAnalysisEnum:
@@ -2042,6 +2042,6 @@
 		int approximation;
 		inputs->GetInputValue(&approximation,ApproximationEnum);
-		if(approximation==StokesApproximationEnum || approximation==NoneApproximationEnum){
-			InputUpdateFromSolutionAdjointStokes( solution);
+		if(approximation==FSApproximationEnum || approximation==NoneApproximationEnum){
+			InputUpdateFromSolutionAdjointFS( solution);
 		}
 		else{
@@ -2651,6 +2651,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::ReduceMatrixStokes {{{*/
-void Penta::ReduceMatrixStokes(IssmDouble* Ke_reduced, IssmDouble* Ke_temp){
+/*FUNCTION Penta::ReduceMatrixFS {{{*/
+void Penta::ReduceMatrixFS(IssmDouble* Ke_reduced, IssmDouble* Ke_temp){
 
 	int    i,j;
@@ -2693,6 +2693,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::ReduceVectorStokes {{{*/
-void Penta::ReduceVectorStokes(IssmDouble* Pe_reduced, IssmDouble* Ke_temp, IssmDouble* Pe_temp){
+/*FUNCTION Penta::ReduceVectorFS {{{*/
+void Penta::ReduceVectorFS(IssmDouble* Pe_reduced, IssmDouble* Ke_temp, IssmDouble* Pe_temp){
 
 	int    i,j;
@@ -2786,7 +2786,7 @@
 	IssmDouble xz_plane[6];
 
-	/*For Stokes only: we want the CS to be tangential to the bedrock*/
+	/*For FS only: we want the CS to be tangential to the bedrock*/
 	inputs->GetInputValue(&approximation,ApproximationEnum);
-	if(IsFloating() || !IsOnBed() || (approximation!=StokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum &&  approximation!=PattynStokesApproximationEnum)) return;
+	if(IsFloating() || !IsOnBed() || (approximation!=FSApproximationEnum && approximation!=MacAyealFSApproximationEnum &&  approximation!=HOFSApproximationEnum)) return;
 
 	/*Get slope on each node*/
@@ -2883,5 +2883,5 @@
 	if(analysis_type==DiagnosticHorizAnalysisEnum){
 		inputs->GetInputValue(&approximation,ApproximationEnum);
-		if(approximation==MacAyealPattynApproximationEnum || approximation==MacAyealStokesApproximationEnum){
+		if(approximation==MacAyealHOApproximationEnum || approximation==MacAyealFSApproximationEnum){
 			parameters->FindParam(&numlayers,MeshNumberoflayersEnum);
 			o_nz += numlayers*3;
@@ -3102,5 +3102,5 @@
 	int        stabilization;
 	bool       dakota_analysis;
-	bool       isstokes;
+	bool       isFS;
 	IssmDouble beta,heatcapacity,referencetemperature,meltingpoint,latentheat;
 
@@ -3109,5 +3109,5 @@
 	iomodel->Constant(&stabilization,PrognosticStabilizationEnum);
 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
-	iomodel->Constant(&isstokes,FlowequationIsstokesEnum);
+	iomodel->Constant(&isFS,FlowequationIsFSEnum);
 	iomodel->Constant(&beta,MaterialsBetaEnum);
 	iomodel->Constant(&heatcapacity,MaterialsHeatcapacityEnum);
@@ -3175,34 +3175,34 @@
 					this->inputs->AddInput(new PentaInput(QmuPressureEnum,nodeinputs,P1Enum));
 				}
-				if(isstokes){
+				if(isFS){
 					this->inputs->AddInput(new PentaInput(PressureEnum,nodeinputs,P1Enum));
 					this->inputs->AddInput(new PentaInput(PressurePicardEnum,nodeinputs,P1Enum));
 				}
 			}
-			if(*(iomodel->Data(FlowequationElementEquationEnum)+index)==PattynStokesApproximationEnum){
-				/*Create VzPattyn and VzStokes Enums*/
-				if(iomodel->Data(VzEnum) && iomodel->Data(FlowequationBorderstokesEnum)){
-					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*iomodel->Data(FlowequationBorderstokesEnum)[penta_vertex_ids[i]-1];
-					this->inputs->AddInput(new PentaInput(VzStokesEnum,nodeinputs,P1Enum));
-					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*(1-iomodel->Data(FlowequationBorderstokesEnum)[penta_vertex_ids[i]-1]);
-					this->inputs->AddInput(new PentaInput(VzPattynEnum,nodeinputs,P1Enum));
+			if(*(iomodel->Data(FlowequationElementEquationEnum)+index)==HOFSApproximationEnum){
+				/*Create VzHO and VzFS Enums*/
+				if(iomodel->Data(VzEnum) && iomodel->Data(FlowequationBorderFSEnum)){
+					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*iomodel->Data(FlowequationBorderFSEnum)[penta_vertex_ids[i]-1];
+					this->inputs->AddInput(new PentaInput(VzFSEnum,nodeinputs,P1Enum));
+					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*(1-iomodel->Data(FlowequationBorderFSEnum)[penta_vertex_ids[i]-1]);
+					this->inputs->AddInput(new PentaInput(VzHOEnum,nodeinputs,P1Enum));
 				}
 				else{
 					for(i=0;i<6;i++)nodeinputs[i]=0;
-					this->inputs->AddInput(new PentaInput(VzStokesEnum,nodeinputs,P1Enum));
-					this->inputs->AddInput(new PentaInput(VzPattynEnum,nodeinputs,P1Enum));
+					this->inputs->AddInput(new PentaInput(VzFSEnum,nodeinputs,P1Enum));
+					this->inputs->AddInput(new PentaInput(VzHOEnum,nodeinputs,P1Enum));
 				}
 			}
-			if(*(iomodel->Data(FlowequationElementEquationEnum)+index)==MacAyealStokesApproximationEnum){
-				/*Create VzMacAyeal and VzStokes Enums*/
-				if(iomodel->Data(VzEnum) && iomodel->Data(FlowequationBorderstokesEnum)){
-					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*iomodel->Data(FlowequationBorderstokesEnum)[penta_vertex_ids[i]-1];
-					this->inputs->AddInput(new PentaInput(VzStokesEnum,nodeinputs,P1Enum));
-					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*(1-iomodel->Data(FlowequationBorderstokesEnum)[penta_vertex_ids[i]-1]);
+			if(*(iomodel->Data(FlowequationElementEquationEnum)+index)==MacAyealFSApproximationEnum){
+				/*Create VzMacAyeal and VzFS Enums*/
+				if(iomodel->Data(VzEnum) && iomodel->Data(FlowequationBorderFSEnum)){
+					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*iomodel->Data(FlowequationBorderFSEnum)[penta_vertex_ids[i]-1];
+					this->inputs->AddInput(new PentaInput(VzFSEnum,nodeinputs,P1Enum));
+					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*(1-iomodel->Data(FlowequationBorderFSEnum)[penta_vertex_ids[i]-1]);
 					this->inputs->AddInput(new PentaInput(VzMacAyealEnum,nodeinputs,P1Enum));
 				}
 				else{
 					for(i=0;i<6;i++)nodeinputs[i]=0;
-					this->inputs->AddInput(new PentaInput(VzStokesEnum,nodeinputs,P1Enum));
+					this->inputs->AddInput(new PentaInput(VzFSEnum,nodeinputs,P1Enum));
 					this->inputs->AddInput(new PentaInput(VzMacAyealEnum,nodeinputs,P1Enum));
 				}
@@ -3289,5 +3289,5 @@
 
 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
-		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
+		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
 		GetPhi(&phi, &epsilon[0], viscosity);
 
@@ -4067,5 +4067,5 @@
 
 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
-		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
+		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
 		GetPhi(&phi, &epsilon[0], viscosity);
 
@@ -4323,5 +4323,5 @@
 
 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
-		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
+		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
 		GetPhi(&phi, &epsilon[0], viscosity);
 
@@ -4776,8 +4776,8 @@
 		case MacAyealApproximationEnum:
 			return CreateKMatrixAdjointMacAyeal2d();
-		case PattynApproximationEnum:
-			return CreateKMatrixAdjointPattyn();
-		case StokesApproximationEnum:
-			return CreateKMatrixAdjointStokes();
+		case HOApproximationEnum:
+			return CreateKMatrixAdjointHO();
+		case FSApproximationEnum:
+			return CreateKMatrixAdjointFS();
 		case NoneApproximationEnum:
 			return NULL;
@@ -4821,6 +4821,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreateKMatrixAdjointPattyn{{{*/
-ElementMatrix* Penta::CreateKMatrixAdjointPattyn(void){
+/*FUNCTION Penta::CreateKMatrixAdjointHO{{{*/
+ElementMatrix* Penta::CreateKMatrixAdjointHO(void){
 
 	/*Intermediaries */
@@ -4838,7 +4838,7 @@
 	GaussPenta *gauss=NULL;
 
-	/*Initialize Jacobian with regular Pattyn (first part of the Gateau derivative)*/
+	/*Initialize Jacobian with regular HO (first part of the Gateau derivative)*/
 	parameters->FindParam(&incomplete_adjoint,InversionIncompleteAdjointEnum);
-	ElementMatrix* Ke=CreateKMatrixDiagnosticPattyn();
+	ElementMatrix* Ke=CreateKMatrixDiagnosticHO();
 	if(incomplete_adjoint) return Ke;
 
@@ -4857,5 +4857,5 @@
 		GetNodalFunctionsP1Derivatives(&dphi[0][0],&xyz_list[0][0],gauss);
 
-		this->GetStrainRate3dPattyn(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
+		this->GetStrainRate3dHO(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
 		material->GetViscosityDerivativeEpsSquare(&mu_prime,&epsilon[0]);
 		eps1[0]=2*epsilon[0]+epsilon[1];   eps2[0]=epsilon[2];
@@ -4886,6 +4886,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreateKMatrixAdjointStokes{{{*/
-ElementMatrix* Penta::CreateKMatrixAdjointStokes(void){
+/*FUNCTION Penta::CreateKMatrixAdjointFS{{{*/
+ElementMatrix* Penta::CreateKMatrixAdjointFS(void){
 
 	/*Constants*/
@@ -4906,7 +4906,7 @@
 	GaussPenta *gauss=NULL;
 
-	/*Initialize Jacobian with regular Stokes (first part of the Gateau derivative)*/
+	/*Initialize Jacobian with regular FS (first part of the Gateau derivative)*/
 	parameters->FindParam(&incomplete_adjoint,InversionIncompleteAdjointEnum);
-	ElementMatrix* Ke=CreateKMatrixDiagnosticStokes();
+	ElementMatrix* Ke=CreateKMatrixDiagnosticFS();
 	if(incomplete_adjoint) return Ke;
 
@@ -4926,5 +4926,5 @@
 		GetNodalFunctionsP1Derivatives(&dphi[0][0],&xyz_list[0][0],gauss);
 
-		this->GetStrainRate3dPattyn(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
+		this->GetStrainRate3dHO(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
 		material->GetViscosityDerivativeEpsSquare(&mu_prime,&epsilon[0]);
 		eps1[0]=epsilon[0];   eps2[0]=epsilon[2];   eps3[0]=epsilon[3];
@@ -4973,10 +4973,10 @@
 		case MacAyealApproximationEnum:
 			return CreatePVectorAdjointMacAyeal();
-		case PattynApproximationEnum:
-			return CreatePVectorAdjointPattyn();
+		case HOApproximationEnum:
+			return CreatePVectorAdjointHO();
 		case NoneApproximationEnum:
 			return NULL;
-		case StokesApproximationEnum:
-			return CreatePVectorAdjointStokes();
+		case FSApproximationEnum:
+			return CreatePVectorAdjointFS();
 		default:
 			_error_("Approximation " << EnumToStringx(approximation) << " not supported yet");
@@ -4998,6 +4998,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreatePVectorAdjointPattyn{{{*/
-ElementVector* Penta::CreatePVectorAdjointPattyn(void){
+/*FUNCTION Penta::CreatePVectorAdjointHO{{{*/
+ElementVector* Penta::CreatePVectorAdjointHO(void){
 
 	if (!IsOnSurface()) return NULL;
@@ -5012,6 +5012,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreatePVectorAdjointStokes{{{*/
-ElementVector* Penta::CreatePVectorAdjointStokes(void){
+/*FUNCTION Penta::CreatePVectorAdjointFS{{{*/
+ElementVector* Penta::CreatePVectorAdjointFS(void){
 
 	if (!IsOnSurface()) return NULL;
@@ -5019,5 +5019,5 @@
 	/*Call Tria function*/
 	Tria* tria=(Tria*)SpawnTria(3,4,5); //nodes 3, 4 and 5 make the new tria (upper face).
-	ElementVector* pe=tria->CreatePVectorAdjointStokes();
+	ElementVector* pe=tria->CreatePVectorAdjointFS();
 	delete tria->material; delete tria;
 
@@ -5059,9 +5059,9 @@
 					GradjDragMacAyeal(gradient,control_index);
 					break;
-				case PattynApproximationEnum:
-					GradjDragPattyn(gradient,control_index);
+				case HOApproximationEnum:
+					GradjDragHO(gradient,control_index);
 					break;
-				case StokesApproximationEnum:
-					GradjDragStokes(gradient,control_index);
+				case FSApproximationEnum:
+					GradjDragFS(gradient,control_index);
 					break;
 				case NoneApproximationEnum:
@@ -5079,9 +5079,9 @@
 					GradjBbarMacAyeal(gradient,control_index);
 					break;
-				case PattynApproximationEnum:
-					GradjBbarPattyn(gradient,control_index);
+				case HOApproximationEnum:
+					GradjBbarHO(gradient,control_index);
 					break;
-				case StokesApproximationEnum:
-					GradjBbarStokes(gradient,control_index);
+				case FSApproximationEnum:
+					GradjBbarFS(gradient,control_index);
 					break;
 				case NoneApproximationEnum:
@@ -5143,6 +5143,6 @@
 
 } /*}}}*/
-/*FUNCTION Penta::GradjDragPattyn {{{*/
-void  Penta::GradjDragPattyn(Vector<IssmDouble>* gradient,int control_index){
+/*FUNCTION Penta::GradjDragHO {{{*/
+void  Penta::GradjDragHO(Vector<IssmDouble>* gradient,int control_index){
 
 	int        i,j;
@@ -5214,6 +5214,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::GradjDragStokes {{{*/
-void  Penta::GradjDragStokes(Vector<IssmDouble>* gradient,int control_index){
+/*FUNCTION Penta::GradjDragFS {{{*/
+void  Penta::GradjDragFS(Vector<IssmDouble>* gradient,int control_index){
 
 	int        i,j;
@@ -5324,6 +5324,6 @@
 
 } /*}}}*/
-/*FUNCTION Penta::GradjBbarPattyn {{{*/
-void  Penta::GradjBbarPattyn(Vector<IssmDouble>* gradient,int control_index){
+/*FUNCTION Penta::GradjBbarHO {{{*/
+void  Penta::GradjBbarHO(Vector<IssmDouble>* gradient,int control_index){
 
 	/*Gradient is computed on bed only (Bbar)*/
@@ -5341,6 +5341,6 @@
 	this->material->inputs->DeleteInput(MaterialsRheologyBbarEnum);
 } /*}}}*/
-/*FUNCTION Penta::GradjBbarStokes {{{*/
-void  Penta::GradjBbarStokes(Vector<IssmDouble>* gradient,int control_index){
+/*FUNCTION Penta::GradjBbarFS {{{*/
+void  Penta::GradjBbarFS(Vector<IssmDouble>* gradient,int control_index){
 
 	/*Gradient is computed on bed only (Bbar)*/
@@ -5403,6 +5403,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::InputUpdateFromSolutionAdjointStokes {{{*/
-void  Penta::InputUpdateFromSolutionAdjointStokes(IssmDouble* solution){
+/*FUNCTION Penta::InputUpdateFromSolutionAdjointFS {{{*/
+void  Penta::InputUpdateFromSolutionAdjointFS(IssmDouble* solution){
 
 	const int    numdof=NDOF4*NUMVERTICES;
@@ -5951,13 +5951,13 @@
 
 	switch(approximation){
-		case StokesApproximationEnum:
-			return CreateDVectorDiagnosticStokes();
+		case FSApproximationEnum:
+			return CreateDVectorDiagnosticFS();
 		default:
-			return NULL; //no need for doftypes outside of stokes approximation
-	}
-}
-/*}}}*/
-/*FUNCTION Penta::CreateDVectorDiagnosticStokes{{{*/
-ElementVector* Penta::CreateDVectorDiagnosticStokes(void){
+			return NULL; //no need for doftypes outside of FS approximation
+	}
+}
+/*}}}*/
+/*FUNCTION Penta::CreateDVectorDiagnosticFS{{{*/
+ElementVector* Penta::CreateDVectorDiagnosticFS(void){
 
 	/*output: */
@@ -5969,7 +5969,7 @@
 	/*Initialize Element vector and return if necessary*/
 	inputs->GetInputValue(&approximation,ApproximationEnum);
-	if(approximation!=StokesApproximationEnum) return NULL;
-
-	De=new ElementVector(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
+	if(approximation!=FSApproximationEnum) return NULL;
+
+	De=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
 
 	for (i=0;i<NUMVERTICES;i++){
@@ -5983,10 +5983,10 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreateKMatrixCouplingMacAyealPattyn{{{*/
-ElementMatrix* Penta::CreateKMatrixCouplingMacAyealPattyn(void){
+/*FUNCTION Penta::CreateKMatrixCouplingMacAyealHO{{{*/
+ElementMatrix* Penta::CreateKMatrixCouplingMacAyealHO(void){
 
 	/*compute all stiffness matrices for this element*/
-	ElementMatrix* Ke1=CreateKMatrixCouplingMacAyealPattynViscous();
-	ElementMatrix* Ke2=CreateKMatrixCouplingMacAyealPattynFriction();
+	ElementMatrix* Ke1=CreateKMatrixCouplingMacAyealHOViscous();
+	ElementMatrix* Ke2=CreateKMatrixCouplingMacAyealHOFriction();
 	ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2);
 
@@ -5997,6 +5997,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreateKMatrixCouplingMacAyealPattynViscous{{{*/
-ElementMatrix* Penta::CreateKMatrixCouplingMacAyealPattynViscous(void){
+/*FUNCTION Penta::CreateKMatrixCouplingMacAyealHOViscous{{{*/
+ElementMatrix* Penta::CreateKMatrixCouplingMacAyealHOViscous(void){
 
 	/*Constants*/
@@ -6023,5 +6023,5 @@
 	int         cs_list[numnodes];
 
-	/*Find penta on bed as pattyn must be coupled to the dofs on the bed: */
+	/*Find penta on bed as HO must be coupled to the dofs on the bed: */
 	Penta* pentabase=GetBasalElement();
 	Tria*  tria=pentabase->SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
@@ -6037,5 +6037,5 @@
 	/*Initialize Element matrix*/
 	ElementMatrix* Ke1=new ElementMatrix(pentabase->nodes,NUMVERTICES,this->parameters,MacAyealApproximationEnum);
-	ElementMatrix* Ke2=new ElementMatrix(this->nodes     ,NUMVERTICES,this->parameters,PattynApproximationEnum);
+	ElementMatrix* Ke2=new ElementMatrix(this->nodes     ,NUMVERTICES,this->parameters,HOApproximationEnum);
 	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2);
 	delete Ke1; delete Ke2;
@@ -6058,9 +6058,9 @@
 
 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
-		GetBMacAyealPattyn(&B[0][0], &xyz_list[0][0], gauss);
+		GetBMacAyealHO(&B[0][0], &xyz_list[0][0], gauss);
 		tria->GetBprimeMacAyeal(&Bprime[0][0], &xyz_list[0][0], gauss_tria);
 
-		this->GetStrainRate3dPattyn(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
-		this->GetStrainRate3dPattyn(&oldepsilon[0],&xyz_list[0][0],gauss,vxold_input,vyold_input);
+		this->GetStrainRate3dHO(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
+		this->GetStrainRate3dHO(&oldepsilon[0],&xyz_list[0][0],gauss,vxold_input,vyold_input);
 		material->GetViscosity3d(&viscosity, &epsilon[0]);
 		material->GetViscosity3d(&oldviscosity, &oldepsilon[0]);
@@ -6090,6 +6090,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreateKMatrixCouplingMacAyealPattynFriction{{{*/
-ElementMatrix* Penta::CreateKMatrixCouplingMacAyealPattynFriction(void){
+/*FUNCTION Penta::CreateKMatrixCouplingMacAyealHOFriction{{{*/
+ElementMatrix* Penta::CreateKMatrixCouplingMacAyealHOFriction(void){
 
 	/*Constants*/
@@ -6116,5 +6116,5 @@
 	if(IsFloating() || !IsOnBed()) return NULL;
 	ElementMatrix* Ke1=new ElementMatrix(nodes,NUMVERTICES,this->parameters,MacAyealApproximationEnum);
-	ElementMatrix* Ke2=new ElementMatrix(nodes,NUMVERTICES,this->parameters,PattynApproximationEnum);
+	ElementMatrix* Ke2=new ElementMatrix(nodes,NUMVERTICES,this->parameters,HOApproximationEnum);
 	ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2);
 	delete Ke1; delete Ke2;
@@ -6149,5 +6149,5 @@
 
 		GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0],gauss);
-		GetBPattynFriction(&L[0][0],gauss);
+		GetBHOFriction(&L[0][0],gauss);
 
 		DL_scalar=alpha2*gauss->weight*Jdet2d;
@@ -6175,10 +6175,10 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreateKMatrixCouplingMacAyealStokes{{{*/
-ElementMatrix* Penta::CreateKMatrixCouplingMacAyealStokes(void){
+/*FUNCTION Penta::CreateKMatrixCouplingMacAyealFS{{{*/
+ElementMatrix* Penta::CreateKMatrixCouplingMacAyealFS(void){
 
 	/*compute all stiffness matrices for this element*/
-	ElementMatrix* Ke1=CreateKMatrixCouplingMacAyealStokesViscous();
-	ElementMatrix* Ke2=CreateKMatrixCouplingMacAyealStokesFriction();
+	ElementMatrix* Ke1=CreateKMatrixCouplingMacAyealFSViscous();
+	ElementMatrix* Ke2=CreateKMatrixCouplingMacAyealFSFriction();
 	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2);
 
@@ -6189,6 +6189,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreateKMatrixCouplingMacAyealStokesViscous{{{*/
-ElementMatrix* Penta::CreateKMatrixCouplingMacAyealStokesViscous(void){
+/*FUNCTION Penta::CreateKMatrixCouplingMacAyealFSViscous{{{*/
+ElementMatrix* Penta::CreateKMatrixCouplingMacAyealFSViscous(void){
 
 	/*Constants*/
@@ -6201,5 +6201,5 @@
 	int         i,j;
 	IssmDouble Jdet;
-	IssmDouble viscosity,stokesreconditioning; //viscosity
+	IssmDouble viscosity,FSreconditioning; //viscosity
 	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,exy,exz,eyz];*/
 	IssmDouble xyz_list[NUMVERTICES][3];
@@ -6220,5 +6220,5 @@
 	int         cs_list[numnodes];
 
-	/*Find penta on bed as stokes must be coupled to the dofs on the bed: */
+	/*Find penta on bed as FS must be coupled to the dofs on the bed: */
 	Penta* pentabase=GetBasalElement();
 	Tria* tria=pentabase->SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
@@ -6234,5 +6234,5 @@
 	/*Initialize Element matrix and return if necessary*/
 	ElementMatrix* Ke1=new ElementMatrix(pentabase->nodes,NUMVERTICES,this->parameters,MacAyealApproximationEnum);
-	ElementMatrix* Ke2=new ElementMatrix(this->nodes     ,NUMVERTICES,this->parameters,StokesApproximationEnum);
+	ElementMatrix* Ke2=new ElementMatrix(this->nodes     ,NUMVERTICES,this->parameters,FSApproximationEnum);
 	ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2);
 	delete Ke1; delete Ke2;
@@ -6240,5 +6240,5 @@
 	/* Get node coordinates and dof list: */
 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
-	parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
+	parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
 	Input* vx_input=inputs->GetInput(VxEnum);       _assert_(vx_input);
 	Input* vy_input=inputs->GetInput(VyEnum);       _assert_(vy_input);
@@ -6254,15 +6254,15 @@
 
 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
-		GetBMacAyealStokes(&B[0][0], &xyz_list[0][0], gauss);
-		tria->GetBprimeMacAyealStokes(&Bprime[0][0], &xyz_list[0][0], gauss_tria);
-		tria->GetBMacAyealStokes(&B2[0][0], &xyz_list[0][0], gauss_tria);
-		GetBprimeMacAyealStokes(&Bprime2[0][0], &xyz_list[0][0], gauss);
+		GetBMacAyealFS(&B[0][0], &xyz_list[0][0], gauss);
+		tria->GetBprimeMacAyealFS(&Bprime[0][0], &xyz_list[0][0], gauss_tria);
+		tria->GetBMacAyealFS(&B2[0][0], &xyz_list[0][0], gauss_tria);
+		GetBprimeMacAyealFS(&Bprime2[0][0], &xyz_list[0][0], gauss);
 
 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
-		material->GetViscosity3dStokes(&viscosity, &epsilon[0]);
+		material->GetViscosity3dFS(&viscosity, &epsilon[0]);
 
 		D_scalar=2*viscosity*gauss->weight*Jdet;
 		for (i=0;i<3;i++) D[i][i]=D_scalar;
-		D[3][3]=-gauss->weight*Jdet*stokesreconditioning;
+		D[3][3]=-gauss->weight*Jdet*FSreconditioning;
 		for (i=0;i<3;i++) D2[i][i]=D_scalar;
 
@@ -6293,6 +6293,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreateKMatrixCouplingMacAyealStokesFriction {{{*/
-ElementMatrix* Penta::CreateKMatrixCouplingMacAyealStokesFriction(void){
+/*FUNCTION Penta::CreateKMatrixCouplingMacAyealFSFriction {{{*/
+ElementMatrix* Penta::CreateKMatrixCouplingMacAyealFSFriction(void){
 
 	/*Constants*/
@@ -6307,5 +6307,5 @@
 	int        i,j;
 	int        analysis_type,approximation;
-	IssmDouble stokesreconditioning;
+	IssmDouble FSreconditioning;
 	IssmDouble viscosity,alpha2_gauss,Jdet2d;
 	IssmDouble bed_normal[3];
@@ -6313,10 +6313,10 @@
 	IssmDouble xyz_list[NUMVERTICES][3];
 	IssmDouble xyz_list_tria[NUMVERTICES2D][3];
-	IssmDouble LMacAyealStokes[8][numdof2dm];
-	IssmDouble LprimeMacAyealStokes[8][numdof2d];
-	IssmDouble DLMacAyealStokes[8][8]={0.0};
-	IssmDouble LStokesMacAyeal[4][numdof2d];
-	IssmDouble LprimeStokesMacAyeal[4][numdof2dm];
-	IssmDouble DLStokesMacAyeal[4][4]={0.0};
+	IssmDouble LMacAyealFS[8][numdof2dm];
+	IssmDouble LprimeMacAyealFS[8][numdof2d];
+	IssmDouble DLMacAyealFS[8][8]={0.0};
+	IssmDouble LFSMacAyeal[4][numdof2d];
+	IssmDouble LprimeFSMacAyeal[4][numdof2dm];
+	IssmDouble DLFSMacAyeal[4][4]={0.0};
 	IssmDouble Ke_drag_gaussian[numdof2dm][numdof2d];
 	IssmDouble Ke_drag_gaussian2[numdof2d][numdof2dm];
@@ -6326,9 +6326,9 @@
 	int         cs_list[numnodes];
 
-	/*If on water or not Stokes, skip stiffness: */
+	/*If on water or not FS, skip stiffness: */
 	inputs->GetInputValue(&approximation,ApproximationEnum);
 	if(IsFloating() || !IsOnBed()) return NULL;
 	ElementMatrix* Ke1=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,MacAyealApproximationEnum);
-	ElementMatrix* Ke2=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
+	ElementMatrix* Ke2=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
 	ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2);
 	delete Ke1; delete Ke2;
@@ -6345,5 +6345,5 @@
 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
-	parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
+	parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
 	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
 	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
@@ -6361,37 +6361,37 @@
 
 		GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0],gauss);
-		GetLMacAyealStokes(&LMacAyealStokes[0][0], gauss);
-		GetLprimeMacAyealStokes(&LprimeMacAyealStokes[0][0], &xyz_list[0][0], gauss);
-		GetLStokesMacAyeal(&LStokesMacAyeal[0][0], gauss);
-		GetLprimeStokesMacAyeal(&LprimeStokesMacAyeal[0][0], &xyz_list[0][0], gauss);
+		GetLMacAyealFS(&LMacAyealFS[0][0], gauss);
+		GetLprimeMacAyealFS(&LprimeMacAyealFS[0][0], &xyz_list[0][0], gauss);
+		GetLFSMacAyeal(&LFSMacAyeal[0][0], gauss);
+		GetLprimeFSMacAyeal(&LprimeFSMacAyeal[0][0], &xyz_list[0][0], gauss);
 
 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
-		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
+		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
 
 		BedNormal(&bed_normal[0],xyz_list_tria);
 		friction->GetAlpha2(&alpha2_gauss, gauss,VxEnum,VyEnum,VzEnum);
 
-		DLMacAyealStokes[0][0]=alpha2_gauss*gauss->weight*Jdet2d;
-		DLMacAyealStokes[1][1]=alpha2_gauss*gauss->weight*Jdet2d;
-		DLMacAyealStokes[2][2]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[0]*bed_normal[2];
-		DLMacAyealStokes[3][3]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[1]*bed_normal[2];
-		DLMacAyealStokes[4][4]=-2*viscosity*gauss->weight*Jdet2d*bed_normal[0];
-		DLMacAyealStokes[5][5]=-2*viscosity*gauss->weight*Jdet2d*bed_normal[1];
-		DLMacAyealStokes[6][6]=stokesreconditioning*gauss->weight*Jdet2d*bed_normal[0];
-		DLMacAyealStokes[7][7]=stokesreconditioning*gauss->weight*Jdet2d*bed_normal[1];
-
-		DLStokesMacAyeal[0][0]=alpha2_gauss*gauss->weight*Jdet2d;
-		DLStokesMacAyeal[1][1]=alpha2_gauss*gauss->weight*Jdet2d;
-		DLStokesMacAyeal[2][2]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[0]*bed_normal[2];
-		DLStokesMacAyeal[3][3]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[1]*bed_normal[2];
-
-		TripleMultiply( &LMacAyealStokes[0][0],8,numdof2dm,1,
-					&DLMacAyealStokes[0][0],8,8,0,
-					&LprimeMacAyealStokes[0][0],8,numdof2d,0,
+		DLMacAyealFS[0][0]=alpha2_gauss*gauss->weight*Jdet2d;
+		DLMacAyealFS[1][1]=alpha2_gauss*gauss->weight*Jdet2d;
+		DLMacAyealFS[2][2]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[0]*bed_normal[2];
+		DLMacAyealFS[3][3]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[1]*bed_normal[2];
+		DLMacAyealFS[4][4]=-2*viscosity*gauss->weight*Jdet2d*bed_normal[0];
+		DLMacAyealFS[5][5]=-2*viscosity*gauss->weight*Jdet2d*bed_normal[1];
+		DLMacAyealFS[6][6]=FSreconditioning*gauss->weight*Jdet2d*bed_normal[0];
+		DLMacAyealFS[7][7]=FSreconditioning*gauss->weight*Jdet2d*bed_normal[1];
+
+		DLFSMacAyeal[0][0]=alpha2_gauss*gauss->weight*Jdet2d;
+		DLFSMacAyeal[1][1]=alpha2_gauss*gauss->weight*Jdet2d;
+		DLFSMacAyeal[2][2]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[0]*bed_normal[2];
+		DLFSMacAyeal[3][3]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[1]*bed_normal[2];
+
+		TripleMultiply( &LMacAyealFS[0][0],8,numdof2dm,1,
+					&DLMacAyealFS[0][0],8,8,0,
+					&LprimeMacAyealFS[0][0],8,numdof2d,0,
 					&Ke_drag_gaussian[0][0],0);
 
-		TripleMultiply( &LStokesMacAyeal[0][0],4,numdof2d,1,
-					&DLStokesMacAyeal[0][0],4,4,0,
-					&LprimeStokesMacAyeal[0][0],4,numdof2dm,0,
+		TripleMultiply( &LFSMacAyeal[0][0],4,numdof2d,1,
+					&DLFSMacAyeal[0][0],4,4,0,
+					&LprimeFSMacAyeal[0][0],4,numdof2dm,0,
 					&Ke_drag_gaussian2[0][0],0);
 
@@ -6409,6 +6409,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreateKMatrixCouplingPattynStokes{{{*/
-ElementMatrix* Penta::CreateKMatrixCouplingPattynStokes(void){
+/*FUNCTION Penta::CreateKMatrixCouplingHOFS{{{*/
+ElementMatrix* Penta::CreateKMatrixCouplingHOFS(void){
 
 	/*Constants*/
@@ -6432,11 +6432,11 @@
 
 	/*compute all stiffness matrices for this element*/
-	ElementMatrix* Ke1=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,PattynApproximationEnum);
-	ElementMatrix* Ke2=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
+	ElementMatrix* Ke1=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,HOApproximationEnum);
+	ElementMatrix* Ke2=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
 	ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2);
 	delete Ke1;
 	delete Ke2;
-	Ke1=CreateKMatrixDiagnosticPattyn(); TransformInvStiffnessMatrixCoord(Ke1,this->nodes,NUMVERTICES,XYEnum);
-	Ke2=CreateKMatrixDiagnosticStokes(); TransformInvStiffnessMatrixCoord(Ke2,this->nodes,NUMVERTICES,XYZPEnum);
+	Ke1=CreateKMatrixDiagnosticHO(); TransformInvStiffnessMatrixCoord(Ke1,this->nodes,NUMVERTICES,XYEnum);
+	Ke2=CreateKMatrixDiagnosticFS(); TransformInvStiffnessMatrixCoord(Ke2,this->nodes,NUMVERTICES,XYZPEnum);
 
 	for(i=0;i<numdofs;i++) for(j=0;j<NUMVERTICES;j++){
@@ -6469,18 +6469,18 @@
 		case L1L2ApproximationEnum:
 			return CreateKMatrixDiagnosticL1L2();
-		case PattynApproximationEnum:
-			return CreateKMatrixDiagnosticPattyn();
-		case StokesApproximationEnum:
-			return CreateKMatrixDiagnosticStokes();
-		case HutterApproximationEnum:
+		case HOApproximationEnum:
+			return CreateKMatrixDiagnosticHO();
+		case FSApproximationEnum:
+			return CreateKMatrixDiagnosticFS();
+		case SIAApproximationEnum:
 			return NULL;
 		case NoneApproximationEnum:
 			return NULL;
-		case MacAyealPattynApproximationEnum:
-			return CreateKMatrixDiagnosticMacAyealPattyn();
-		case MacAyealStokesApproximationEnum:
-			return CreateKMatrixDiagnosticMacAyealStokes();
-		case PattynStokesApproximationEnum:
-			return CreateKMatrixDiagnosticPattynStokes();
+		case MacAyealHOApproximationEnum:
+			return CreateKMatrixDiagnosticMacAyealHO();
+		case MacAyealFSApproximationEnum:
+			return CreateKMatrixDiagnosticMacAyealFS();
+		case HOFSApproximationEnum:
+			return CreateKMatrixDiagnosticHOFS();
 		default:
 			_error_("Approximation " << EnumToStringx(approximation) << " not supported yet");
@@ -6488,6 +6488,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreateKMatrixDiagnosticHutter{{{*/
-ElementMatrix* Penta::CreateKMatrixDiagnosticHutter(void){
+/*FUNCTION Penta::CreateKMatrixDiagnosticSIA{{{*/
+ElementMatrix* Penta::CreateKMatrixDiagnosticSIA(void){
 
 	/*Constants*/
@@ -6610,5 +6610,5 @@
 	IssmDouble  viscosity , oldviscosity, newviscosity, viscosity_overshoot;
 	IssmDouble  epsilon[5],oldepsilon[5];       /* epsilon=[exx,eyy,exy,exz,eyz];*/
-	IssmDouble  epsilons[6];                    //6 for stokes
+	IssmDouble  epsilons[6];                    //6 for FS
 	IssmDouble  xyz_list[NUMVERTICES][3];
 	IssmDouble  B[3][numdof2d];
@@ -6622,5 +6622,5 @@
 	GaussTria  *gauss_tria = NULL;
 
-	/*Find penta on bed as this is a macayeal elements: */
+	/*Find penta on bed as this is a SSA elements: */
 	pentabase=GetBasalElement();
 	tria=pentabase->SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
@@ -6651,7 +6651,7 @@
 		tria->GetBprimeMacAyeal(&Bprime[0][0], &xyz_list[0][0], gauss_tria);
 
-		if(approximation==MacAyealPattynApproximationEnum){
-			this->GetStrainRate3dPattyn(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
-			this->GetStrainRate3dPattyn(&oldepsilon[0],&xyz_list[0][0],gauss,vxold_input,vyold_input);
+		if(approximation==MacAyealHOApproximationEnum){
+			this->GetStrainRate3dHO(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
+			this->GetStrainRate3dHO(&oldepsilon[0],&xyz_list[0][0],gauss,vxold_input,vyold_input);
 			material->GetViscosity3d(&viscosity, &epsilon[0]);
 			material->GetViscosity3d(&oldviscosity, &oldepsilon[0]);
@@ -6659,7 +6659,7 @@
 			newviscosity=viscosity+viscosity_overshoot*(viscosity-oldviscosity);
 		}
-		else if (approximation==MacAyealStokesApproximationEnum){
+		else if (approximation==MacAyealFSApproximationEnum){
 			this->GetStrainRate3d(&epsilons[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
-			material->GetViscosity3dStokes(&newviscosity,&epsilons[0]);
+			material->GetViscosity3dFS(&newviscosity,&epsilons[0]);
 		}
 		else _error_("approximation " << approximation << " (" << EnumToStringx(approximation) << ") not supported yet");
@@ -6704,11 +6704,11 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreateKMatrixDiagnosticMacAyealPattyn{{{*/
-ElementMatrix* Penta::CreateKMatrixDiagnosticMacAyealPattyn(void){
+/*FUNCTION Penta::CreateKMatrixDiagnosticMacAyealHO{{{*/
+ElementMatrix* Penta::CreateKMatrixDiagnosticMacAyealHO(void){
 
 	/*compute all stiffness matrices for this element*/
 	ElementMatrix* Ke1=CreateKMatrixDiagnosticMacAyeal3d();
-	ElementMatrix* Ke2=CreateKMatrixDiagnosticPattyn();
-	ElementMatrix* Ke3=CreateKMatrixCouplingMacAyealPattyn();
+	ElementMatrix* Ke2=CreateKMatrixDiagnosticHO();
+	ElementMatrix* Ke3=CreateKMatrixCouplingMacAyealHO();
 	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2,Ke3);
 
@@ -6720,11 +6720,11 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreateKMatrixDiagnosticMacAyealStokes{{{*/
-ElementMatrix* Penta::CreateKMatrixDiagnosticMacAyealStokes(void){
+/*FUNCTION Penta::CreateKMatrixDiagnosticMacAyealFS{{{*/
+ElementMatrix* Penta::CreateKMatrixDiagnosticMacAyealFS(void){
 
 	/*compute all stiffness matrices for this element*/
 	ElementMatrix* Ke1=CreateKMatrixDiagnosticMacAyeal3d();
-	ElementMatrix* Ke2=CreateKMatrixDiagnosticStokes();
-	ElementMatrix* Ke3=CreateKMatrixCouplingMacAyealStokes();
+	ElementMatrix* Ke2=CreateKMatrixDiagnosticFS();
+	ElementMatrix* Ke3=CreateKMatrixCouplingMacAyealFS();
 	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2,Ke3);
 
@@ -6770,5 +6770,5 @@
 	GaussTria  *gauss_tria = NULL;
 
-	/*Find penta on bed as this is a macayeal elements: */
+	/*Find penta on bed as this is a SSA elements: */
 	pentabase=GetBasalElement();
 	tria=pentabase->SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
@@ -6835,10 +6835,10 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreateKMatrixDiagnosticPattyn{{{*/
-ElementMatrix* Penta::CreateKMatrixDiagnosticPattyn(void){
+/*FUNCTION Penta::CreateKMatrixDiagnosticHO{{{*/
+ElementMatrix* Penta::CreateKMatrixDiagnosticHO(void){
 
 	/*compute all stiffness matrices for this element*/
-	ElementMatrix* Ke1=CreateKMatrixDiagnosticPattynViscous();
-	ElementMatrix* Ke2=CreateKMatrixDiagnosticPattynFriction();
+	ElementMatrix* Ke1=CreateKMatrixDiagnosticHOViscous();
+	ElementMatrix* Ke2=CreateKMatrixDiagnosticHOFriction();
 	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2);
 
@@ -6850,6 +6850,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreateKMatrixDiagnosticPattynViscous{{{*/
-ElementMatrix* Penta::CreateKMatrixDiagnosticPattynViscous(void){
+/*FUNCTION Penta::CreateKMatrixDiagnosticHOViscous{{{*/
+ElementMatrix* Penta::CreateKMatrixDiagnosticHOViscous(void){
 
 	/*Constants*/
@@ -6871,5 +6871,5 @@
 
 	/*Initialize Element matrix*/
-	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,PattynApproximationEnum);
+	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,HOApproximationEnum);
 
 	/*Retrieve all inputs and parameters*/
@@ -6889,9 +6889,9 @@
 
 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
-		GetBPattyn(&B[0][0], &xyz_list[0][0], gauss);
-		GetBprimePattyn(&Bprime[0][0], &xyz_list[0][0], gauss);
-
-		this->GetStrainRate3dPattyn(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
-		this->GetStrainRate3dPattyn(&oldepsilon[0],&xyz_list[0][0],gauss,vxold_input,vyold_input);
+		GetBHO(&B[0][0], &xyz_list[0][0], gauss);
+		GetBprimeHO(&Bprime[0][0], &xyz_list[0][0], gauss);
+
+		this->GetStrainRate3dHO(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
+		this->GetStrainRate3dHO(&oldepsilon[0],&xyz_list[0][0],gauss,vxold_input,vyold_input);
 		material->GetViscosity3d(&viscosity, &epsilon[0]);
 		material->GetViscosity3d(&oldviscosity, &oldepsilon[0]);
@@ -6915,6 +6915,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreateKMatrixDiagnosticPattynFriction{{{*/
-ElementMatrix* Penta::CreateKMatrixDiagnosticPattynFriction(void){
+/*FUNCTION Penta::CreateKMatrixDiagnosticHOFriction{{{*/
+ElementMatrix* Penta::CreateKMatrixDiagnosticHOFriction(void){
 
 	/*Constants*/
@@ -6937,5 +6937,5 @@
 	if(IsFloating() || !IsOnBed()) return NULL;
 
-	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,PattynApproximationEnum);
+	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,HOApproximationEnum);
 
 	/*Retrieve all inputs and parameters*/
@@ -6962,5 +6962,5 @@
 
 		GetTriaJacobianDeterminant(&Jdet, &xyz_list_tria[0][0],gauss);
-		GetBPattynFriction(&L[0][0],gauss);
+		GetBHOFriction(&L[0][0],gauss);
 
 		friction->GetAlpha2(&alpha2, gauss,VxEnum,VyEnum,VzEnum); 
@@ -6985,11 +6985,11 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreateKMatrixDiagnosticPattynStokes{{{*/
-ElementMatrix* Penta::CreateKMatrixDiagnosticPattynStokes(void){
+/*FUNCTION Penta::CreateKMatrixDiagnosticHOFS{{{*/
+ElementMatrix* Penta::CreateKMatrixDiagnosticHOFS(void){
 
 	/*compute all stiffness matrices for this element*/
-	ElementMatrix* Ke1=CreateKMatrixDiagnosticPattyn();
-	ElementMatrix* Ke2=CreateKMatrixDiagnosticStokes();
-	ElementMatrix* Ke3=CreateKMatrixCouplingPattynStokes();
+	ElementMatrix* Ke1=CreateKMatrixDiagnosticHO();
+	ElementMatrix* Ke2=CreateKMatrixDiagnosticFS();
+	ElementMatrix* Ke3=CreateKMatrixCouplingHOFS();
 	ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2,Ke3);
 
@@ -7001,28 +7001,28 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreateKMatrixDiagnosticStokes{{{*/
-ElementMatrix* Penta::CreateKMatrixDiagnosticStokes(void){
-
-	int fe_stokes;
+/*FUNCTION Penta::CreateKMatrixDiagnosticFS{{{*/
+ElementMatrix* Penta::CreateKMatrixDiagnosticFS(void){
+
+	int fe_FS;
 	ElementMatrix* Ke1;
 	ElementMatrix* Ke2;
 	ElementMatrix* Ke;
-	parameters->FindParam(&fe_stokes,FlowequationFeStokesEnum);
-
-	switch(fe_stokes){
+	parameters->FindParam(&fe_FS,FlowequationFeFSEnum);
+
+	switch(fe_FS){
 		case 0:
 			/*compute all stiffness matrices for this element*/
-			Ke1=CreateKMatrixDiagnosticStokesViscous();
-			Ke2=CreateKMatrixDiagnosticStokesFriction();
+			Ke1=CreateKMatrixDiagnosticFSViscous();
+			Ke2=CreateKMatrixDiagnosticFSFriction();
 			Ke =new ElementMatrix(Ke1,Ke2);
 			break;
 		case 1:
 			/*compute all stiffness matrices for this element*/
-			Ke1=CreateKMatrixDiagnosticStokesGLSViscous();
-			Ke2=CreateKMatrixDiagnosticStokesFriction();
+			Ke1=CreateKMatrixDiagnosticFSGLSViscous();
+			Ke2=CreateKMatrixDiagnosticFSFriction();
 			Ke =new ElementMatrix(Ke1,Ke2);
 			break;
 		default:
-			_error_("Finite element" << fe_stokes << " not supported yet");
+			_error_("Finite element" << fe_FS << " not supported yet");
 	}
 
@@ -7034,10 +7034,10 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreateKMatrixDiagnosticStokesViscous {{{*/
-ElementMatrix* Penta::CreateKMatrixDiagnosticStokesViscous(void){
+/*FUNCTION Penta::CreateKMatrixDiagnosticFSViscous {{{*/
+ElementMatrix* Penta::CreateKMatrixDiagnosticFSViscous(void){
 
 	/*Intermediaries */
 	int        i,approximation;
-	IssmDouble Jdet,viscosity,stokesreconditioning;
+	IssmDouble Jdet,viscosity,FSreconditioning;
 	IssmDouble xyz_list[NUMVERTICES][3];
 	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
@@ -7049,12 +7049,12 @@
 	GaussPenta *gauss=NULL;
 
-	/*If on water or not Stokes, skip stiffness: */
+	/*If on water or not FS, skip stiffness: */
 	inputs->GetInputValue(&approximation,ApproximationEnum);
-	if(approximation!=StokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum && approximation!=PattynStokesApproximationEnum) return NULL;
-	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
+	if(approximation!=FSApproximationEnum && approximation!=MacAyealFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
+	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
 
 	/*Retrieve all inputs and parameters*/
 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
-	parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
+	parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
 	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
 	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
@@ -7068,13 +7068,13 @@
 
 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
-		GetBStokes(&B[0][0],&xyz_list[0][0],gauss); 
-		GetBprimeStokes(&B_prime[0][0],&xyz_list[0][0],gauss); 
+		GetBFS(&B[0][0],&xyz_list[0][0],gauss); 
+		GetBprimeFS(&B_prime[0][0],&xyz_list[0][0],gauss); 
 
 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
-		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
+		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
 
 		D_scalar=gauss->weight*Jdet;
 		for (i=0;i<6;i++) D[i][i]=D_scalar*2*viscosity;
-		for (i=6;i<8;i++) D[i][i]=-D_scalar*stokesreconditioning;
+		for (i=6;i<8;i++) D[i][i]=-D_scalar*FSreconditioning;
 
 		TripleMultiply( &B[0][0],8,27,1,
@@ -7085,5 +7085,5 @@
 
 	/*Condensation*/
-	ReduceMatrixStokes(Ke->values, &Ke_temp[0][0]);
+	ReduceMatrixFS(Ke->values, &Ke_temp[0][0]);
 	//Ke->Echo();
 	//_error_("stop");
@@ -7097,6 +7097,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreateKMatrixDiagnosticStokesGLSViscous {{{*/
-ElementMatrix* Penta::CreateKMatrixDiagnosticStokesGLSViscous(void){
+/*FUNCTION Penta::CreateKMatrixDiagnosticFSGLSViscous {{{*/
+ElementMatrix* Penta::CreateKMatrixDiagnosticFSGLSViscous(void){
 
 	int        numdof  = NUMVERTICES*NDOF4;
@@ -7104,5 +7104,5 @@
 	/*Intermediaries */
 	int        i,j,approximation;
-	IssmDouble Jdet,viscosity,stokesreconditioning,diameter,rigidity;
+	IssmDouble Jdet,viscosity,FSreconditioning,diameter,rigidity;
 	IssmDouble xyz_list[NUMVERTICES][3];
 	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
@@ -7128,12 +7128,12 @@
 	int c=3; //index of pressure
 
-	/*If on water or not Stokes, skip stiffness: */
+	/*If on water or not FS, skip stiffness: */
 	inputs->GetInputValue(&approximation,ApproximationEnum);
-	if(approximation!=StokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum && approximation!=PattynStokesApproximationEnum) return NULL;
-	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
+	if(approximation!=FSApproximationEnum && approximation!=MacAyealFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
+	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
 
 	/*Retrieve all inputs and parameters*/
 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
-	parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
+	parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
 	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
 	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
@@ -7165,13 +7165,13 @@
 
 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
-		GetBStokesGLS(&B[0][0],&xyz_list[0][0],gauss); 
-		GetBprimeStokesGLS(&B_prime[0][0],&xyz_list[0][0],gauss); 
+		GetBFSGLS(&B[0][0],&xyz_list[0][0],gauss); 
+		GetBprimeFSGLS(&B_prime[0][0],&xyz_list[0][0],gauss); 
 
 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
-		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
+		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
 
 		D_scalar=gauss->weight*Jdet;
 		for (i=0;i<6;i++) D[i][i]=D_scalar*2.*2.*viscosity;
-		for (i=6;i<8;i++) D[i][i]=-D_scalar*stokesreconditioning;
+		for (i=6;i<8;i++) D[i][i]=-D_scalar*FSreconditioning;
 
 		TripleMultiply( &B[0][0],8,24,1,
@@ -7235,6 +7235,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreateKMatrixDiagnosticStokesFriction{{{*/
-ElementMatrix* Penta::CreateKMatrixDiagnosticStokesFriction(void){
+/*FUNCTION Penta::CreateKMatrixDiagnosticFSFriction{{{*/
+ElementMatrix* Penta::CreateKMatrixDiagnosticFSFriction(void){
 
 	/*Constants*/
@@ -7246,23 +7246,23 @@
 	int        analysis_type,approximation;
 	IssmDouble alpha2,Jdet2d;
-	IssmDouble stokesreconditioning,viscosity;
+	IssmDouble FSreconditioning,viscosity;
 	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
 	IssmDouble xyz_list[NUMVERTICES][3];
 	IssmDouble xyz_list_tria[NUMVERTICES2D][3];
-	IssmDouble LStokes[2][numdof2d];
-	IssmDouble DLStokes[2][2]={0.0};
+	IssmDouble LFS[2][numdof2d];
+	IssmDouble DLFS[2][2]={0.0};
 	IssmDouble Ke_drag_gaussian[numdof2d][numdof2d];
 	Friction*  friction=NULL;
 	GaussPenta *gauss=NULL;
 
-	/*If on water or not Stokes, skip stiffness: */
+	/*If on water or not FS, skip stiffness: */
 	inputs->GetInputValue(&approximation,ApproximationEnum);
-	if(IsFloating() || !IsOnBed() || (approximation!=StokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum &&  approximation!=PattynStokesApproximationEnum)) return NULL;
-	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
+	if(IsFloating() || !IsOnBed() || (approximation!=FSApproximationEnum && approximation!=MacAyealFSApproximationEnum &&  approximation!=HOFSApproximationEnum)) return NULL;
+	ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
 
 	/*Retrieve all inputs and parameters*/
 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
-	parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
+	parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
 	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
 	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
@@ -7280,17 +7280,17 @@
 
 		GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0],gauss);
-		GetLStokes(&LStokes[0][0], gauss);
+		GetLFS(&LFS[0][0], gauss);
 
 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
-		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
+		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
 
 		friction->GetAlpha2(&alpha2, gauss,VxEnum,VyEnum,VzEnum);
 
-		DLStokes[0][0] = +alpha2*gauss->weight*Jdet2d; //taub_x = -alpha2 vx
-		DLStokes[1][1] = +alpha2*gauss->weight*Jdet2d; //taub_y = -alpha2 vy
-
-		TripleMultiply( &LStokes[0][0],2,numdof2d,1,
-					&DLStokes[0][0],2,2,0,
-					&LStokes[0][0],2,numdof2d,0,
+		DLFS[0][0] = +alpha2*gauss->weight*Jdet2d; //taub_x = -alpha2 vx
+		DLFS[1][1] = +alpha2*gauss->weight*Jdet2d; //taub_y = -alpha2 vy
+
+		TripleMultiply( &LFS[0][0],2,numdof2d,1,
+					&DLFS[0][0],2,2,0,
+					&LFS[0][0],2,numdof2d,0,
 					&Ke_drag_gaussian[0][0],0);
 
@@ -7412,10 +7412,10 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreatePVectorCouplingMacAyealStokes {{{*/
-ElementVector* Penta::CreatePVectorCouplingMacAyealStokes(void){
+/*FUNCTION Penta::CreatePVectorCouplingMacAyealFS {{{*/
+ElementVector* Penta::CreatePVectorCouplingMacAyealFS(void){
 
 	/*compute all load vectors for this element*/
-	ElementVector* pe1=CreatePVectorCouplingMacAyealStokesViscous();
-	ElementVector* pe2=CreatePVectorCouplingMacAyealStokesFriction();
+	ElementVector* pe1=CreatePVectorCouplingMacAyealFSViscous();
+	ElementVector* pe2=CreatePVectorCouplingMacAyealFSFriction();
 	ElementVector* pe =new ElementVector(pe1,pe2);
 
@@ -7426,6 +7426,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreatePVectorCouplingMacAyealStokesViscous {{{*/
-ElementVector* Penta::CreatePVectorCouplingMacAyealStokesViscous(void){
+/*FUNCTION Penta::CreatePVectorCouplingMacAyealFSViscous {{{*/
+ElementVector* Penta::CreatePVectorCouplingMacAyealFSViscous(void){
 
 	/*Constants*/
@@ -7436,5 +7436,5 @@
 	int         approximation;
 	IssmDouble  viscosity,Jdet;
-	IssmDouble  stokesreconditioning;
+	IssmDouble  FSreconditioning;
 	IssmDouble  epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
 	IssmDouble  dw[3];
@@ -7446,14 +7446,14 @@
 	/*Initialize Element vector and return if necessary*/
 	inputs->GetInputValue(&approximation,ApproximationEnum);
-	if(approximation!=MacAyealStokesApproximationEnum) return NULL;
-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
+	if(approximation!=MacAyealFSApproximationEnum) return NULL;
+	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
 
 	/*Retrieve all inputs and parameters*/
 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
-	this->parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
+	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
 	Input* vx_input=inputs->GetInput(VxEnum);               _assert_(vx_input);
 	Input* vy_input=inputs->GetInput(VyEnum);               _assert_(vy_input);
 	Input* vz_input=inputs->GetInput(VzEnum);               _assert_(vz_input);
-	Input* vzmacayeal_input=inputs->GetInput(VzMacAyealEnum);   _assert_(vzmacayeal_input);
+	Input* vzSSA_input=inputs->GetInput(VzMacAyealEnum);   _assert_(vzSSA_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -7467,8 +7467,8 @@
 		GetNodalFunctionsP1Derivatives(&dbasis[0][0],&xyz_list[0][0], gauss);
 
-		vzmacayeal_input->GetInputDerivativeValue(&dw[0],&xyz_list[0][0],gauss);
+		vzSSA_input->GetInputDerivativeValue(&dw[0],&xyz_list[0][0],gauss);
 
 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
-		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
+		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
 
 		for(i=0;i<NUMVERTICES;i++){
@@ -7476,5 +7476,5 @@
 			pe->values[i*NDOF4+1]+=-Jdet*gauss->weight*viscosity*dw[1]*dbasis[2][i];
 			pe->values[i*NDOF4+2]+=-Jdet*gauss->weight*viscosity*(dw[0]*dbasis[0][i]+dw[1]*dbasis[1][i]+2*dw[2]*dbasis[2][i]);
-			pe->values[i*NDOF4+3]+=Jdet*gauss->weight*stokesreconditioning*dw[2]*basis[i];
+			pe->values[i*NDOF4+3]+=Jdet*gauss->weight*FSreconditioning*dw[2]*basis[i];
 		}
 	}
@@ -7488,6 +7488,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreatePVectorCouplingMacAyealStokesFriction{{{*/
-ElementVector* Penta::CreatePVectorCouplingMacAyealStokesFriction(void){
+/*FUNCTION Penta::CreatePVectorCouplingMacAyealFSFriction{{{*/
+ElementVector* Penta::CreatePVectorCouplingMacAyealFSFriction(void){
 
 	/*Constants*/
@@ -7498,5 +7498,5 @@
 	int         approximation,analysis_type;
 	IssmDouble  Jdet,Jdet2d;
-	IssmDouble  stokesreconditioning;
+	IssmDouble  FSreconditioning;
 	IssmDouble	bed_normal[3];
 	IssmDouble  epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
@@ -7513,15 +7513,15 @@
 	if(!IsOnBed() || IsFloating()) return NULL;
 	inputs->GetInputValue(&approximation,ApproximationEnum);
-	if(approximation!=MacAyealStokesApproximationEnum) return NULL;
-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
+	if(approximation!=MacAyealFSApproximationEnum) return NULL;
+	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
 
 	/*Retrieve all inputs and parameters*/
 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
-	this->parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
+	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
 	Input* vx_input=inputs->GetInput(VxEnum);               _assert_(vx_input);
 	Input* vy_input=inputs->GetInput(VyEnum);               _assert_(vy_input);
 	Input* vz_input=inputs->GetInput(VzEnum);               _assert_(vz_input);
-	Input* vzmacayeal_input=inputs->GetInput(VzMacAyealEnum);   _assert_(vzmacayeal_input);
+	Input* vzSSA_input=inputs->GetInput(VzMacAyealEnum);   _assert_(vzSSA_input);
 
 	for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<3;j++) xyz_list_tria[i][j]=xyz_list[i][j];
@@ -7539,10 +7539,10 @@
 		GetNodalFunctionsP1(basis, gauss);
 
-		vzmacayeal_input->GetInputValue(&w, gauss);
-		vzmacayeal_input->GetInputDerivativeValue(&dw[0],&xyz_list[0][0],gauss);
+		vzSSA_input->GetInputValue(&w, gauss);
+		vzSSA_input->GetInputDerivativeValue(&dw[0],&xyz_list[0][0],gauss);
 
 		BedNormal(&bed_normal[0],xyz_list_tria);
 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
-		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
+		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
 		friction->GetAlpha2(&alpha2_gauss, gauss,VxEnum,VyEnum,VzEnum);
 
@@ -7563,10 +7563,10 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreatePVectorCouplingPattynStokes {{{*/
-ElementVector* Penta::CreatePVectorCouplingPattynStokes(void){
+/*FUNCTION Penta::CreatePVectorCouplingHOFS {{{*/
+ElementVector* Penta::CreatePVectorCouplingHOFS(void){
 
 	/*compute all load vectors for this element*/
-	ElementVector* pe1=CreatePVectorCouplingPattynStokesViscous();
-	ElementVector* pe2=CreatePVectorCouplingPattynStokesFriction();
+	ElementVector* pe1=CreatePVectorCouplingHOFSViscous();
+	ElementVector* pe2=CreatePVectorCouplingHOFSFriction();
 	ElementVector* pe =new ElementVector(pe1,pe2);
 
@@ -7577,6 +7577,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreatePVectorCouplingPattynStokesViscous {{{*/
-ElementVector* Penta::CreatePVectorCouplingPattynStokesViscous(void){
+/*FUNCTION Penta::CreatePVectorCouplingHOFSViscous {{{*/
+ElementVector* Penta::CreatePVectorCouplingHOFSViscous(void){
 
 	/*Constants*/
@@ -7587,5 +7587,5 @@
 	int         approximation;
 	IssmDouble  viscosity,Jdet;
-	IssmDouble  stokesreconditioning;
+	IssmDouble  FSreconditioning;
 	IssmDouble  epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
 	IssmDouble  dw[3];
@@ -7597,14 +7597,14 @@
 	/*Initialize Element vector and return if necessary*/
 	inputs->GetInputValue(&approximation,ApproximationEnum);
-	if(approximation!=PattynStokesApproximationEnum) return NULL;
-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
+	if(approximation!=HOFSApproximationEnum) return NULL;
+	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
 
 	/*Retrieve all inputs and parameters*/
 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
-	this->parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
+	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
 	Input* vx_input=inputs->GetInput(VxEnum);               _assert_(vx_input);
 	Input* vy_input=inputs->GetInput(VyEnum);               _assert_(vy_input);
 	Input* vz_input=inputs->GetInput(VzEnum);               _assert_(vz_input);
-	Input* vzpattyn_input=inputs->GetInput(VzPattynEnum);   _assert_(vzpattyn_input);
+	Input* vzHO_input=inputs->GetInput(VzHOEnum);   _assert_(vzHO_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -7618,8 +7618,8 @@
 		GetNodalFunctionsP1Derivatives(&dbasis[0][0],&xyz_list[0][0], gauss);
 
-		vzpattyn_input->GetInputDerivativeValue(&dw[0],&xyz_list[0][0],gauss);
+		vzHO_input->GetInputDerivativeValue(&dw[0],&xyz_list[0][0],gauss);
 
 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
-		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
+		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
 
 		for(i=0;i<NUMVERTICES;i++){
@@ -7627,5 +7627,5 @@
 			pe->values[i*NDOF4+1]+=-Jdet*gauss->weight*viscosity*dw[1]*dbasis[2][i];
 			pe->values[i*NDOF4+2]+=-Jdet*gauss->weight*viscosity*(dw[0]*dbasis[0][i]+dw[1]*dbasis[1][i]+2*dw[2]*dbasis[2][i]);
-			pe->values[i*NDOF4+3]+=Jdet*gauss->weight*stokesreconditioning*dw[2]*basis[i];
+			pe->values[i*NDOF4+3]+=Jdet*gauss->weight*FSreconditioning*dw[2]*basis[i];
 		}
 	}
@@ -7639,6 +7639,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreatePVectorCouplingPattynStokesFriction{{{*/
-ElementVector* Penta::CreatePVectorCouplingPattynStokesFriction(void){
+/*FUNCTION Penta::CreatePVectorCouplingHOFSFriction{{{*/
+ElementVector* Penta::CreatePVectorCouplingHOFSFriction(void){
 
 	/*Constants*/
@@ -7649,5 +7649,5 @@
 	int         approximation,analysis_type;
 	IssmDouble  Jdet,Jdet2d;
-	IssmDouble  stokesreconditioning;
+	IssmDouble  FSreconditioning;
 	IssmDouble	bed_normal[3];
 	IssmDouble  epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
@@ -7664,15 +7664,15 @@
 	if(!IsOnBed() || IsFloating()) return NULL;
 	inputs->GetInputValue(&approximation,ApproximationEnum);
-	if(approximation!=PattynStokesApproximationEnum) return NULL;
-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
+	if(approximation!=HOFSApproximationEnum) return NULL;
+	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
 
 	/*Retrieve all inputs and parameters*/
 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
-	this->parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
+	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
 	Input* vx_input=inputs->GetInput(VxEnum);               _assert_(vx_input);
 	Input* vy_input=inputs->GetInput(VyEnum);               _assert_(vy_input);
 	Input* vz_input=inputs->GetInput(VzEnum);               _assert_(vz_input);
-	Input* vzpattyn_input=inputs->GetInput(VzPattynEnum);   _assert_(vzpattyn_input);
+	Input* vzHO_input=inputs->GetInput(VzHOEnum);   _assert_(vzHO_input);
 
 	for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<3;j++) xyz_list_tria[i][j]=xyz_list[i][j];
@@ -7690,10 +7690,10 @@
 		GetNodalFunctionsP1(basis, gauss);
 
-		vzpattyn_input->GetInputValue(&w, gauss);
-		vzpattyn_input->GetInputDerivativeValue(&dw[0],&xyz_list[0][0],gauss);
+		vzHO_input->GetInputValue(&w, gauss);
+		vzHO_input->GetInputDerivativeValue(&dw[0],&xyz_list[0][0],gauss);
 
 		BedNormal(&bed_normal[0],xyz_list_tria);
 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
-		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
+		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
 		friction->GetAlpha2(&alpha2_gauss, gauss,VxEnum,VyEnum,VzEnum);
 
@@ -7723,20 +7723,20 @@
 		case MacAyealApproximationEnum:
 			return CreatePVectorDiagnosticMacAyeal();
-		case PattynApproximationEnum:
-			return CreatePVectorDiagnosticPattyn();
+		case HOApproximationEnum:
+			return CreatePVectorDiagnosticHO();
 		case L1L2ApproximationEnum:
 			return CreatePVectorDiagnosticL1L2();
-		case HutterApproximationEnum:
+		case SIAApproximationEnum:
 			return NULL;
 		case NoneApproximationEnum:
 			return NULL;
-		case StokesApproximationEnum:
-			return CreatePVectorDiagnosticStokes();
-		case MacAyealPattynApproximationEnum:
-			return CreatePVectorDiagnosticMacAyealPattyn();
-		case MacAyealStokesApproximationEnum:
-			return CreatePVectorDiagnosticMacAyealStokes();
-		case PattynStokesApproximationEnum:
-			return CreatePVectorDiagnosticPattynStokes();
+		case FSApproximationEnum:
+			return CreatePVectorDiagnosticFS();
+		case MacAyealHOApproximationEnum:
+			return CreatePVectorDiagnosticMacAyealHO();
+		case MacAyealFSApproximationEnum:
+			return CreatePVectorDiagnosticMacAyealFS();
+		case HOFSApproximationEnum:
+			return CreatePVectorDiagnosticHOFS();
 		default:
 			_error_("Approximation " << EnumToStringx(approximation) << " not supported yet");
@@ -7744,10 +7744,10 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreatePVectorDiagnosticMacAyealPattyn{{{*/
-ElementVector* Penta::CreatePVectorDiagnosticMacAyealPattyn(void){
+/*FUNCTION Penta::CreatePVectorDiagnosticMacAyealHO{{{*/
+ElementVector* Penta::CreatePVectorDiagnosticMacAyealHO(void){
 
 	/*compute all load vectors for this element*/
 	ElementVector* pe1=CreatePVectorDiagnosticMacAyeal();
-	ElementVector* pe2=CreatePVectorDiagnosticPattyn();
+	ElementVector* pe2=CreatePVectorDiagnosticHO();
 	ElementVector* pe =new ElementVector(pe1,pe2);
 
@@ -7758,11 +7758,11 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreatePVectorDiagnosticMacAyealStokes{{{*/
-ElementVector* Penta::CreatePVectorDiagnosticMacAyealStokes(void){
+/*FUNCTION Penta::CreatePVectorDiagnosticMacAyealFS{{{*/
+ElementVector* Penta::CreatePVectorDiagnosticMacAyealFS(void){
 
 	/*compute all load vectors for this element*/
 	ElementVector* pe1=CreatePVectorDiagnosticMacAyeal();
-	ElementVector* pe2=CreatePVectorDiagnosticStokes();
-	ElementVector* pe3=CreatePVectorCouplingMacAyealStokes();
+	ElementVector* pe2=CreatePVectorDiagnosticFS();
+	ElementVector* pe3=CreatePVectorCouplingMacAyealFS();
 	ElementVector* pe =new ElementVector(pe1,pe2,pe3);
 
@@ -7774,11 +7774,11 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreatePVectorDiagnosticPattynStokes{{{*/
-ElementVector* Penta::CreatePVectorDiagnosticPattynStokes(void){
+/*FUNCTION Penta::CreatePVectorDiagnosticHOFS{{{*/
+ElementVector* Penta::CreatePVectorDiagnosticHOFS(void){
 
 	/*compute all load vectors for this element*/
-	ElementVector* pe1=CreatePVectorDiagnosticPattyn();
-	ElementVector* pe2=CreatePVectorDiagnosticStokes();
-	ElementVector* pe3=CreatePVectorCouplingPattynStokes();
+	ElementVector* pe1=CreatePVectorDiagnosticHO();
+	ElementVector* pe2=CreatePVectorDiagnosticFS();
+	ElementVector* pe3=CreatePVectorCouplingHOFS();
 	ElementVector* pe =new ElementVector(pe1,pe2,pe3);
 
@@ -7790,6 +7790,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreatePVectorDiagnosticHutter{{{*/
-ElementVector* Penta::CreatePVectorDiagnosticHutter(void){
+/*FUNCTION Penta::CreatePVectorDiagnosticSIA{{{*/
+ElementVector* Penta::CreatePVectorDiagnosticSIA(void){
 
 	/*Intermediaries*/
@@ -7903,10 +7903,10 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreatePVectorDiagnosticPattyn{{{*/
-ElementVector* Penta::CreatePVectorDiagnosticPattyn(void){
+/*FUNCTION Penta::CreatePVectorDiagnosticHO{{{*/
+ElementVector* Penta::CreatePVectorDiagnosticHO(void){
 
 	/*compute all load vectors for this element*/
-	ElementVector* pe1=CreatePVectorDiagnosticPattynDrivingStress();
-	ElementVector* pe2=CreatePVectorDiagnosticPattynFront();
+	ElementVector* pe1=CreatePVectorDiagnosticHODrivingStress();
+	ElementVector* pe2=CreatePVectorDiagnosticHOFront();
 	ElementVector* pe =new ElementVector(pe1,pe2);
 
@@ -7917,6 +7917,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreatePVectorDiagnosticPattynDrivingStress{{{*/
-ElementVector* Penta::CreatePVectorDiagnosticPattynDrivingStress(void){
+/*FUNCTION Penta::CreatePVectorDiagnosticHODrivingStress{{{*/
+ElementVector* Penta::CreatePVectorDiagnosticHODrivingStress(void){
 
 	/*Constants*/
@@ -7933,5 +7933,5 @@
 
 	/*Initialize Element vector*/
-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,PattynApproximationEnum);
+	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,HOApproximationEnum);
 
 	/*Retrieve all inputs and parameters*/
@@ -7965,6 +7965,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreatePVectorDiagnosticPattynFront{{{*/
-ElementVector* Penta::CreatePVectorDiagnosticPattynFront(void){
+/*FUNCTION Penta::CreatePVectorDiagnosticHOFront{{{*/
+ElementVector* Penta::CreatePVectorDiagnosticHOFront(void){
 
 	/*Intermediaries */
@@ -8000,5 +8000,5 @@
 
 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
-	ElementVector* pe=new ElementVector(nodes,numnodes,this->parameters,PattynApproximationEnum);
+	ElementVector* pe=new ElementVector(nodes,numnodes,this->parameters,HOApproximationEnum);
 	Input* surface_input=inputs->GetInput(SurfaceEnum); _assert_(surface_input);
 	rho_water=matpar->GetRhoWater();
@@ -8043,31 +8043,31 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreatePVectorDiagnosticStokes {{{*/
-ElementVector* Penta::CreatePVectorDiagnosticStokes(void){
-
-	int fe_stokes;
+/*FUNCTION Penta::CreatePVectorDiagnosticFS {{{*/
+ElementVector* Penta::CreatePVectorDiagnosticFS(void){
+
+	int fe_FS;
 	ElementVector* pe1;
 	ElementVector* pe2;
 	ElementVector* pe3;
 	ElementVector* pe;
-	parameters->FindParam(&fe_stokes,FlowequationFeStokesEnum);
-
-	switch(fe_stokes){
+	parameters->FindParam(&fe_FS,FlowequationFeFSEnum);
+
+	switch(fe_FS){
 		case 0:
 			/*compute all stiffness matrices for this element*/
-			pe1=CreatePVectorDiagnosticStokesViscous();
-			pe2=CreatePVectorDiagnosticStokesShelf();
-			pe3=CreatePVectorDiagnosticStokesFront();
+			pe1=CreatePVectorDiagnosticFSViscous();
+			pe2=CreatePVectorDiagnosticFSShelf();
+			pe3=CreatePVectorDiagnosticFSFront();
 			pe =new ElementVector(pe1,pe2,pe3);
 			break;
 		case 1:
 			/*compute all stiffness matrices for this element*/
-			pe1=CreatePVectorDiagnosticStokesGLSViscous();
-			pe2=CreatePVectorDiagnosticStokesShelf();
-			pe3=CreatePVectorDiagnosticStokesFront();
+			pe1=CreatePVectorDiagnosticFSGLSViscous();
+			pe2=CreatePVectorDiagnosticFSShelf();
+			pe3=CreatePVectorDiagnosticFSFront();
 			pe =new ElementVector(pe1,pe2,pe3);
 			break;
 		default:
-			_error_("Finite element" << fe_stokes << " not supported yet");
+			_error_("Finite element" << fe_FS << " not supported yet");
 	}
 
@@ -8080,6 +8080,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreatePVectorDiagnosticStokesViscous {{{*/
-ElementVector* Penta::CreatePVectorDiagnosticStokesViscous(void){
+/*FUNCTION Penta::CreatePVectorDiagnosticFSViscous {{{*/
+ElementVector* Penta::CreatePVectorDiagnosticFSViscous(void){
 
 	/*Constants*/
@@ -8090,5 +8090,5 @@
 	int        approximation;
 	IssmDouble Jdet,viscosity;
-	IssmDouble gravity,rho_ice,stokesreconditioning;
+	IssmDouble gravity,rho_ice,FSreconditioning;
 	IssmDouble forcex,forcey,forcez;
 	IssmDouble xyz_list[NUMVERTICES][3];
@@ -8106,9 +8106,9 @@
 	/*Initialize Element vector and return if necessary*/
 	inputs->GetInputValue(&approximation,ApproximationEnum);
-	if(approximation!=StokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum && approximation!=PattynStokesApproximationEnum) return NULL;
-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
+	if(approximation!=FSApproximationEnum && approximation!=MacAyealFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
+	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
 
 	/*Retrieve all inputs and parameters*/
-	this->parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
+	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
 	rho_ice=matpar->GetRhoIce();
 	gravity=matpar->GetG();
@@ -8128,10 +8128,10 @@
 
 		GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
-		GetBStokes(&B[0][0],&xyz_list[0][0],gauss); 
-		GetBprimeStokes(&B_prime[0][0],&xyz_list[0][0], gauss); 
+		GetBFS(&B[0][0],&xyz_list[0][0],gauss); 
+		GetBprimeFS(&B_prime[0][0],&xyz_list[0][0], gauss); 
 		GetNodalFunctionsMINI(&l1l7[0], gauss);
 
 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
-		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
+		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
 
 		loadingforcex_input->GetInputValue(&forcex, gauss);
@@ -8151,5 +8151,5 @@
 		D_scalar=gauss->weight*Jdet;
 		for (i=0;i<6;i++) D[i][i]=D_scalar*2*viscosity;
-		for (i=6;i<8;i++) D[i][i]=-D_scalar*stokesreconditioning;
+		for (i=6;i<8;i++) D[i][i]=-D_scalar*FSreconditioning;
 
 		TripleMultiply(&B[0][0],8,numdofbubble,1,
@@ -8160,5 +8160,5 @@
 
 	/*Condensation*/
-	ReduceVectorStokes(pe->values, &Ke_temp[0][0], &Pe_gaussian[0]);
+	ReduceVectorFS(pe->values, &Ke_temp[0][0], &Pe_gaussian[0]);
 
 	/*Transform coordinate system*/
@@ -8170,6 +8170,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreatePVectorDiagnosticStokesFront{{{*/
-ElementVector* Penta::CreatePVectorDiagnosticStokesFront(void){
+/*FUNCTION Penta::CreatePVectorDiagnosticFSFront{{{*/
+ElementVector* Penta::CreatePVectorDiagnosticFSFront(void){
 
 	/*Intermediaries */
@@ -8205,5 +8205,5 @@
 
 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
-	ElementVector* pe=new ElementVector(nodes,numnodes,this->parameters,StokesApproximationEnum);
+	ElementVector* pe=new ElementVector(nodes,numnodes,this->parameters,FSApproximationEnum);
 	rho_water=matpar->GetRhoWater();
 	rho_ice  =matpar->GetRhoIce();
@@ -8247,6 +8247,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreatePVectorDiagnosticStokesGLSViscous {{{*/
-ElementVector* Penta::CreatePVectorDiagnosticStokesGLSViscous(void){
+/*FUNCTION Penta::CreatePVectorDiagnosticFSGLSViscous {{{*/
+ElementVector* Penta::CreatePVectorDiagnosticFSGLSViscous(void){
 
 	/*Constants*/
@@ -8257,5 +8257,5 @@
 	int        approximation;
 	IssmDouble Jdet,gravity,rho_ice,B,D_scalar_stab,viscosity;
-	IssmDouble forcex,forcey,forcez,diameter,stokesreconditioning;
+	IssmDouble forcex,forcey,forcez,diameter,FSreconditioning;
 	IssmDouble xyz_list[NUMVERTICES][3];
 	IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
@@ -8276,7 +8276,7 @@
 	/*Initialize Element vector and return if necessary*/
 	inputs->GetInputValue(&approximation,ApproximationEnum);
-	if(approximation!=StokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum && approximation!=PattynStokesApproximationEnum) return NULL;
-	parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
+	if(approximation!=FSApproximationEnum && approximation!=MacAyealFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
+	parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
+	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
 
 	/*Retrieve all inputs and parameters*/
@@ -8318,5 +8318,5 @@
 		GetNodalFunctionsP1(&l1l6[0], gauss);
 		this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
-		material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
+		material->GetViscosity3dFS(&viscosity,&epsilon[0]);
 
 		loadingforcex_input->GetInputValue(&forcex, gauss);
@@ -8372,6 +8372,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreatePVectorDiagnosticStokesShelf{{{*/
-ElementVector* Penta::CreatePVectorDiagnosticStokesShelf(void){
+/*FUNCTION Penta::CreatePVectorDiagnosticFSShelf{{{*/
+ElementVector* Penta::CreatePVectorDiagnosticFSShelf(void){
 
 	/*Intermediaries*/
@@ -8392,6 +8392,6 @@
 	inputs->GetInputValue(&approximation,ApproximationEnum);
 	this->parameters->FindParam(&shelf_dampening,DiagnosticShelfDampeningEnum);
-	if(approximation!=StokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum && approximation!=PattynStokesApproximationEnum) return NULL;
-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
+	if(approximation!=FSApproximationEnum && approximation!=MacAyealFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
+	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
 
 	/*Retrieve all inputs and parameters*/
@@ -8477,7 +8477,7 @@
 	Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
 	Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
-	Input* vzstokes_input=NULL;
-	if(approximation==PattynStokesApproximationEnum || approximation==MacAyealStokesApproximationEnum){
-		vzstokes_input=inputs->GetInput(VzStokesEnum); _assert_(vzstokes_input);
+	Input* vzFS_input=NULL;
+	if(approximation==HOFSApproximationEnum || approximation==MacAyealFSApproximationEnum){
+		vzFS_input=inputs->GetInput(VzFSEnum); _assert_(vzFS_input);
 	}
 
@@ -8493,6 +8493,6 @@
 		vx_input->GetInputDerivativeValue(&du[0],&xyz_list[0][0],gauss);
 		vy_input->GetInputDerivativeValue(&dv[0],&xyz_list[0][0],gauss);
-		if(approximation==PattynStokesApproximationEnum || approximation==MacAyealStokesApproximationEnum){
-			vzstokes_input->GetInputDerivativeValue(&dw[0],&xyz_list[0][0],gauss);
+		if(approximation==HOFSApproximationEnum || approximation==MacAyealFSApproximationEnum){
+			vzFS_input->GetInputDerivativeValue(&dw[0],&xyz_list[0][0],gauss);
 			dwdz=dw[2];
 		}
@@ -8539,7 +8539,7 @@
 	Input* vx_input=inputs->GetInput(VxEnum);                                  _assert_(vx_input);
 	Input* vy_input=inputs->GetInput(VyEnum);                                  _assert_(vy_input);
-	Input* vzstokes_input=NULL;
-	if(approximation==PattynStokesApproximationEnum || approximation==MacAyealStokesApproximationEnum){
-		vzstokes_input=inputs->GetInput(VzStokesEnum);       _assert_(vzstokes_input);
+	Input* vzFS_input=NULL;
+	if(approximation==HOFSApproximationEnum || approximation==MacAyealFSApproximationEnum){
+		vzFS_input=inputs->GetInput(VzFSEnum);       _assert_(vzFS_input);
 	}
 
@@ -8554,6 +8554,6 @@
 		vx_input->GetInputValue(&vx, gauss);
 		vy_input->GetInputValue(&vy, gauss);
-		if(approximation==PattynStokesApproximationEnum || approximation==MacAyealStokesApproximationEnum){
-			vzstokes_input->GetInputValue(&vz, gauss);
+		if(approximation==HOFSApproximationEnum || approximation==MacAyealFSApproximationEnum){
+			vzFS_input->GetInputValue(&vz, gauss);
 		}
 		else vz=0;
@@ -8581,9 +8581,9 @@
 	switch(approximation){
 		case MacAyealApproximationEnum:
-			return CreateJacobianDiagnosticMacayeal2d();
-		case PattynApproximationEnum:
-			return CreateJacobianDiagnosticPattyn();
-		case StokesApproximationEnum:
-			return CreateJacobianDiagnosticStokes();
+			return CreateJacobianDiagnosticSSA2d();
+		case HOApproximationEnum:
+			return CreateJacobianDiagnosticHO();
+		case FSApproximationEnum:
+			return CreateJacobianDiagnosticFS();
 		case NoneApproximationEnum:
 			return NULL;
@@ -8593,6 +8593,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreateJacobianDiagnosticMacayeal2d{{{*/
-ElementMatrix* Penta::CreateJacobianDiagnosticMacayeal2d(void){
+/*FUNCTION Penta::CreateJacobianDiagnosticSSA2d{{{*/
+ElementMatrix* Penta::CreateJacobianDiagnosticSSA2d(void){
 
 	/*Figure out if this penta is collapsed. If so, then bailout, except if it is at the 
@@ -8616,5 +8616,5 @@
 	/*Call Tria function*/
 	Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
-	ElementMatrix* Ke=tria->CreateJacobianDiagnosticMacayeal();
+	ElementMatrix* Ke=tria->CreateJacobianDiagnosticSSA();
 	delete tria->material; delete tria;
 
@@ -8627,6 +8627,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreateJacobianDiagnosticPattyn{{{*/
-ElementMatrix* Penta::CreateJacobianDiagnosticPattyn(void){
+/*FUNCTION Penta::CreateJacobianDiagnosticHO{{{*/
+ElementMatrix* Penta::CreateJacobianDiagnosticHO(void){
 
 	/*Constants*/
@@ -8645,6 +8645,6 @@
 	GaussPenta *gauss=NULL;
 
-	/*Initialize Jacobian with regular Pattyn (first part of the Gateau derivative)*/
-	ElementMatrix* Ke=CreateKMatrixDiagnosticPattyn();
+	/*Initialize Jacobian with regular HO (first part of the Gateau derivative)*/
+	ElementMatrix* Ke=CreateKMatrixDiagnosticHO();
 
 	/*Retrieve all inputs and parameters*/
@@ -8662,5 +8662,5 @@
 		GetNodalFunctionsP1Derivatives(&dphi[0][0],&xyz_list[0][0],gauss);
 
-		this->GetStrainRate3dPattyn(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
+		this->GetStrainRate3dHO(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
 		material->GetViscosityDerivativeEpsSquare(&mu_prime,&epsilon[0]);
 		eps1[0]=2*epsilon[0]+epsilon[1];   eps2[0]=epsilon[2];
@@ -8691,6 +8691,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::CreateJacobianDiagnosticStokes{{{*/
-ElementMatrix* Penta::CreateJacobianDiagnosticStokes(void){
+/*FUNCTION Penta::CreateJacobianDiagnosticFS{{{*/
+ElementMatrix* Penta::CreateJacobianDiagnosticFS(void){
 
 	/*Constants*/
@@ -8710,6 +8710,6 @@
 	GaussPenta *gauss=NULL;
 
-	/*Initialize Jacobian with regular Stokes (first part of the Gateau derivative)*/
-	ElementMatrix* Ke=CreateKMatrixDiagnosticStokes();
+	/*Initialize Jacobian with regular FS (first part of the Gateau derivative)*/
+	ElementMatrix* Ke=CreateKMatrixDiagnosticFS();
 
 	/*Retrieve all inputs and parameters*/
@@ -8728,5 +8728,5 @@
 		GetNodalFunctionsP1Derivatives(&dphi[0][0],&xyz_list[0][0],gauss);
 
-		this->GetStrainRate3dPattyn(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
+		this->GetStrainRate3dHO(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
 		material->GetViscosityDerivativeEpsSquare(&mu_prime,&epsilon[0]);
 		eps1[0]=epsilon[0];   eps2[0]=epsilon[2];   eps3[0]=epsilon[3];
@@ -8784,5 +8784,5 @@
 
 	/*If the element is a coupling, do nothing: every node is also on an other elements 
-	 * (as coupling is between MacAyeal and Pattyn) so the other element will take care of it*/
+	 * (as coupling is between MacAyeal and HO) so the other element will take care of it*/
 	GetDofList(&doflist,approximation,GsetEnum);
 
@@ -8808,6 +8808,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::GetSolutionFromInputsDiagnosticHutter{{{*/
-void  Penta::GetSolutionFromInputsDiagnosticHutter(Vector<IssmDouble>* solution){
+/*FUNCTION Penta::GetSolutionFromInputsDiagnosticSIA{{{*/
+void  Penta::GetSolutionFromInputsDiagnosticSIA(Vector<IssmDouble>* solution){
 
 	const int    numdof=NDOF2*NUMVERTICES;
@@ -8877,6 +8877,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::GetSolutionFromInputsDiagnosticStokes{{{*/
-void  Penta::GetSolutionFromInputsDiagnosticStokes(Vector<IssmDouble>* solution){
+/*FUNCTION Penta::GetSolutionFromInputsDiagnosticFS{{{*/
+void  Penta::GetSolutionFromInputsDiagnosticFS(Vector<IssmDouble>* solution){
 
 	const int    numdof=NDOF4*NUMVERTICES;
@@ -8885,10 +8885,10 @@
 	int*         doflist=NULL;
 	IssmDouble       vx,vy,vz,p;
-	IssmDouble       stokesreconditioning;
+	IssmDouble       FSreconditioning;
 	IssmDouble       values[numdof];
 	GaussPenta   *gauss;
 
 	/*Get dof list: */
-	GetDofList(&doflist,StokesApproximationEnum,GsetEnum);
+	GetDofList(&doflist,FSApproximationEnum,GsetEnum);
 	Input* vx_input=inputs->GetInput(VxEnum);       _assert_(vx_input);
 	Input* vy_input=inputs->GetInput(VyEnum);       _assert_(vy_input);
@@ -8897,5 +8897,5 @@
 
 	/*Recondition pressure: */
-	this->parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
+	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
 
 	/*Ok, we have vx vy vz and P in values, fill in vx vy vz P arrays: */
@@ -8911,5 +8911,5 @@
 		values[i*NDOF4+1]=vy;
 		values[i*NDOF4+2]=vz;
-		values[i*NDOF4+3]=p/stokesreconditioning;
+		values[i*NDOF4+3]=p/FSreconditioning;
 	}
 
@@ -8961,6 +8961,6 @@
 
 	/* Get eps_b*/
-	vx_input->GetVxStrainRate3dPattyn(epsilonvx,xyz_list,gauss);
-	vy_input->GetVyStrainRate3dPattyn(epsilonvy,xyz_list,gauss);
+	vx_input->GetVxStrainRate3dHO(epsilonvx,xyz_list,gauss);
+	vy_input->GetVyStrainRate3dHO(epsilonvy,xyz_list,gauss);
 	for(i=0;i<5;i++) epsilon[i]=epsilonvx[i]+epsilonvy[i];
 	eps_b = sqrt(epsilon[0]*epsilon[0] + epsilon[1]*epsilon[1] + epsilon[0]*epsilon[1] + epsilon[2]*epsilon[2]);
@@ -9015,18 +9015,18 @@
 		return;
 	}
-	else if (approximation==PattynApproximationEnum){
-		InputUpdateFromSolutionDiagnosticPattyn(solution);
-	}
-	else if (approximation==PattynStokesApproximationEnum){
-		InputUpdateFromSolutionDiagnosticPattynStokes(solution);
-	}
-	else if (approximation==MacAyealStokesApproximationEnum){
-		InputUpdateFromSolutionDiagnosticMacAyealStokes(solution);
-	}
-	else if (approximation==StokesApproximationEnum || approximation==NoneApproximationEnum){
-		InputUpdateFromSolutionDiagnosticStokes(solution);
-	}
-	else if (approximation==MacAyealPattynApproximationEnum){
-		InputUpdateFromSolutionDiagnosticMacAyealPattyn(solution);
+	else if (approximation==HOApproximationEnum){
+		InputUpdateFromSolutionDiagnosticHO(solution);
+	}
+	else if (approximation==HOFSApproximationEnum){
+		InputUpdateFromSolutionDiagnosticHOFS(solution);
+	}
+	else if (approximation==MacAyealFSApproximationEnum){
+		InputUpdateFromSolutionDiagnosticMacAyealFS(solution);
+	}
+	else if (approximation==FSApproximationEnum || approximation==NoneApproximationEnum){
+		InputUpdateFromSolutionDiagnosticFS(solution);
+	}
+	else if (approximation==MacAyealHOApproximationEnum){
+		InputUpdateFromSolutionDiagnosticMacAyealHO(solution);
 	}
 }
@@ -9113,6 +9113,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticMacAyealPattyn {{{*/
-void  Penta::InputUpdateFromSolutionDiagnosticMacAyealPattyn(IssmDouble* solution){
+/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticMacAyealHO {{{*/
+void  Penta::InputUpdateFromSolutionDiagnosticMacAyealHO(IssmDouble* solution){
 
 	const int    numdof=NDOF2*NUMVERTICES;
@@ -9121,6 +9121,6 @@
 	int     i;
 	IssmDouble  rho_ice,g;
-	IssmDouble  macayeal_values[numdof];
-	IssmDouble  pattyn_values[numdof];
+	IssmDouble  SSA_values[numdof];
+	IssmDouble  HO_values[numdof];
 	IssmDouble  vx[NUMVERTICES];
 	IssmDouble  vy[NUMVERTICES];
@@ -9134,10 +9134,10 @@
 	Penta   *penta   = NULL;
 
-	/*OK, we have to add results of this element for pattyn 
-	 * and results from the penta at base for macayeal. Now recover results*/
+	/*OK, we have to add results of this element for HO 
+	 * and results from the penta at base for SSA. Now recover results*/
 	penta=GetBasalElement();
 
-	/*Get dof listof this element (pattyn dofs) and of the penta at base (macayeal dofs): */
-	GetDofList(&doflistp,PattynApproximationEnum,GsetEnum);
+	/*Get dof listof this element (HO dofs) and of the penta at base (SSA dofs): */
+	GetDofList(&doflistp,HOApproximationEnum,GsetEnum);
 	penta->GetDofList(&doflistm,MacAyealApproximationEnum,GsetEnum);
 
@@ -9147,20 +9147,20 @@
 	/*Use the dof list to index into the solution vector: */
 	for(i=0;i<numdof2d;i++){
-		pattyn_values[i]=solution[doflistp[i]];
-		macayeal_values[i]=solution[doflistm[i]];
+		HO_values[i]=solution[doflistp[i]];
+		SSA_values[i]=solution[doflistm[i]];
 	}
 	for(i=numdof2d;i<numdof;i++){
-		pattyn_values[i]=solution[doflistp[i]];
-		macayeal_values[i]=macayeal_values[i-numdof2d];
+		HO_values[i]=solution[doflistp[i]];
+		SSA_values[i]=SSA_values[i-numdof2d];
 	}
 
 	/*Transform solution in Cartesian Space*/
-	TransformSolutionCoord(&macayeal_values[0],penta->nodes,NUMVERTICES,XYEnum);
-	TransformSolutionCoord(&pattyn_values[0],   this->nodes,NUMVERTICES,XYEnum);
+	TransformSolutionCoord(&SSA_values[0],penta->nodes,NUMVERTICES,XYEnum);
+	TransformSolutionCoord(&HO_values[0],   this->nodes,NUMVERTICES,XYEnum);
 
 	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
 	for(i=0;i<NUMVERTICES;i++){
-		vx[i]=macayeal_values[i*NDOF2+0]+pattyn_values[i*NDOF2+0];
-		vy[i]=macayeal_values[i*NDOF2+1]+pattyn_values[i*NDOF2+1];
+		vx[i]=SSA_values[i*NDOF2+0]+HO_values[i*NDOF2+0];
+		vy[i]=SSA_values[i*NDOF2+1]+HO_values[i*NDOF2+1];
 
 		/*Check solution*/
@@ -9197,6 +9197,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticMacAyealStokes {{{*/
-void  Penta::InputUpdateFromSolutionDiagnosticMacAyealStokes(IssmDouble* solution){
+/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticMacAyealFS {{{*/
+void  Penta::InputUpdateFromSolutionDiagnosticMacAyealFS(IssmDouble* solution){
 
 	const int    numdofm=NDOF2*NUMVERTICES;
@@ -9205,12 +9205,12 @@
 
 	int     i;
-	IssmDouble  stokesreconditioning;
-	IssmDouble  macayeal_values[numdofm];
-	IssmDouble  stokes_values[numdofs];
+	IssmDouble  FSreconditioning;
+	IssmDouble  SSA_values[numdofm];
+	IssmDouble  FS_values[numdofs];
 	IssmDouble  vx[NUMVERTICES];
 	IssmDouble  vy[NUMVERTICES];
 	IssmDouble  vz[NUMVERTICES];
-	IssmDouble  vzmacayeal[NUMVERTICES];
-	IssmDouble  vzstokes[NUMVERTICES];
+	IssmDouble  vzSSA[NUMVERTICES];
+	IssmDouble  vzFS[NUMVERTICES];
 	IssmDouble  vel[NUMVERTICES];
 	IssmDouble  pressure[NUMVERTICES];
@@ -9220,12 +9220,12 @@
 	Penta   *penta          = NULL;
 
-	/*OK, we have to add results of this element for macayeal 
-	 * and results from the penta at base for macayeal. Now recover results*/
+	/*OK, we have to add results of this element for SSA 
+	 * and results from the penta at base for SSA. Now recover results*/
 	penta=GetBasalElement();
 
-	/*Get dof listof this element (macayeal dofs) and of the penta at base (macayeal dofs): */
+	/*Get dof listof this element (SSA dofs) and of the penta at base (SSA dofs): */
 	penta->GetDofList(&doflistm,MacAyealApproximationEnum,GsetEnum);
-	GetDofList(&doflists,StokesApproximationEnum,GsetEnum);
-	this->parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
+	GetDofList(&doflists,FSApproximationEnum,GsetEnum);
+	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
 
 	/*Get node data: */
@@ -9234,36 +9234,36 @@
 	/*Use the dof list to index into the solution vector: */
 	for(i=0;i<numdof2d;i++){
-		macayeal_values[i]=solution[doflistm[i]];
-		macayeal_values[i+numdof2d]=solution[doflistm[i]];
+		SSA_values[i]=solution[doflistm[i]];
+		SSA_values[i+numdof2d]=solution[doflistm[i]];
 	}
 	for(i=0;i<numdofs;i++){
-		stokes_values[i]=solution[doflists[i]];
+		FS_values[i]=solution[doflists[i]];
 	}
 
 	/*Transform solution in Cartesian Space*/
-	TransformSolutionCoord(&macayeal_values[0],this->nodes,NUMVERTICES,XYEnum);
-	TransformSolutionCoord(&stokes_values[0],this->nodes,NUMVERTICES,XYZPEnum);
+	TransformSolutionCoord(&SSA_values[0],this->nodes,NUMVERTICES,XYEnum);
+	TransformSolutionCoord(&FS_values[0],this->nodes,NUMVERTICES,XYZPEnum);
 
 	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
 	for(i=0;i<NUMVERTICES;i++){
-		vx[i]=stokes_values[i*NDOF4+0]+macayeal_values[i*NDOF2+0];
-		vy[i]=stokes_values[i*NDOF4+1]+macayeal_values[i*NDOF2+1];
-		vzstokes[i]=stokes_values[i*NDOF4+2];
-		pressure[i]=stokes_values[i*NDOF4+3]*stokesreconditioning;
+		vx[i]=FS_values[i*NDOF4+0]+SSA_values[i*NDOF2+0];
+		vy[i]=FS_values[i*NDOF4+1]+SSA_values[i*NDOF2+1];
+		vzFS[i]=FS_values[i*NDOF4+2];
+		pressure[i]=FS_values[i*NDOF4+3]*FSreconditioning;
 
 		/*Check solution*/
 		if(xIsNan<IssmDouble>(vx[i]))       _error_("NaN found in solution vector");
 		if(xIsNan<IssmDouble>(vy[i]))       _error_("NaN found in solution vector");
-		if(xIsNan<IssmDouble>(vzstokes[i])) _error_("NaN found in solution vector");
+		if(xIsNan<IssmDouble>(vzFS[i])) _error_("NaN found in solution vector");
 		if(xIsNan<IssmDouble>(pressure[i])) _error_("NaN found in solution vector");
 	}
 
 	/*Get Vz*/
-	Input* vzmacayeal_input=inputs->GetInput(VzMacAyealEnum);
-	if (vzmacayeal_input){
-		if (vzmacayeal_input->ObjectEnum()!=PentaInputEnum){
-			_error_("Cannot compute Vel as VzMacAyeal is of type " << EnumToStringx(vzmacayeal_input->ObjectEnum()));
-		}
-		GetInputListOnVertices(&vzmacayeal[0],VzMacAyealEnum);
+	Input* vzSSA_input=inputs->GetInput(VzMacAyealEnum);
+	if (vzSSA_input){
+		if (vzSSA_input->ObjectEnum()!=PentaInputEnum){
+			_error_("Cannot compute Vel as VzMacAyeal is of type " << EnumToStringx(vzSSA_input->ObjectEnum()));
+		}
+		GetInputListOnVertices(&vzSSA[0],VzMacAyealEnum);
 	}
 	else{
@@ -9273,5 +9273,5 @@
 	/*Now Compute vel*/
 	for(i=0;i<NUMVERTICES;i++) {
-		vz[i]=vzmacayeal[i]+vzstokes[i];
+		vz[i]=vzSSA[i]+vzFS[i];
 		vel[i]=pow( pow(vx[i],2.0) + pow(vy[i],2.0) + pow(vz[i],2.0) , 0.5);
 	}
@@ -9288,5 +9288,5 @@
 	this->inputs->AddInput(new PentaInput(VyEnum,vy,P1Enum));
 	this->inputs->AddInput(new PentaInput(VzEnum,vz,P1Enum));
-	this->inputs->AddInput(new PentaInput(VzStokesEnum,vzstokes,P1Enum));
+	this->inputs->AddInput(new PentaInput(VzFSEnum,vzFS,P1Enum));
 	this->inputs->AddInput(new PentaInput(VelEnum,vel,P1Enum));
 	this->inputs->AddInput(new PentaInput(PressureEnum,pressure,P1Enum));
@@ -9378,6 +9378,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticPattyn {{{*/
-void  Penta::InputUpdateFromSolutionDiagnosticPattyn(IssmDouble* solution){
+/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticHO {{{*/
+void  Penta::InputUpdateFromSolutionDiagnosticHO(IssmDouble* solution){
 
 	const int    numdof=NDOF2*NUMVERTICES;
@@ -9396,5 +9396,5 @@
 
 	/*Get dof list: */
-	GetDofList(&doflist,PattynApproximationEnum,GsetEnum);
+	GetDofList(&doflist,HOApproximationEnum,GsetEnum);
 
 	/*Get node data: */
@@ -9452,6 +9452,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticPattynStokes {{{*/
-void  Penta::InputUpdateFromSolutionDiagnosticPattynStokes(IssmDouble* solution){
+/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticHOFS {{{*/
+void  Penta::InputUpdateFromSolutionDiagnosticHOFS(IssmDouble* solution){
 
 	const int    numdofp=NDOF2*NUMVERTICES;
@@ -9459,27 +9459,27 @@
 
 	int    i;
-	IssmDouble pattyn_values[numdofp];
-	IssmDouble stokes_values[numdofs];
+	IssmDouble HO_values[numdofp];
+	IssmDouble FS_values[numdofs];
 	IssmDouble vx[NUMVERTICES];
 	IssmDouble vy[NUMVERTICES];
 	IssmDouble vz[NUMVERTICES];
-	IssmDouble vzpattyn[NUMVERTICES];
-	IssmDouble vzstokes[NUMVERTICES];
+	IssmDouble vzHO[NUMVERTICES];
+	IssmDouble vzFS[NUMVERTICES];
 	IssmDouble vel[NUMVERTICES];
 	IssmDouble pressure[NUMVERTICES];
 	IssmDouble xyz_list[NUMVERTICES][3];
-	IssmDouble stokesreconditioning;
+	IssmDouble FSreconditioning;
 	int*   doflistp      = NULL;
 	int*   doflists      = NULL;
 	Penta  *penta        = NULL;
 
-	/*OK, we have to add results of this element for pattyn 
-	 * and results from the penta at base for macayeal. Now recover results*/
+	/*OK, we have to add results of this element for HO 
+	 * and results from the penta at base for SSA. Now recover results*/
 	penta=GetBasalElement();
 
-	/*Get dof listof this element (pattyn dofs) and of the penta at base (macayeal dofs): */
-	GetDofList(&doflistp,PattynApproximationEnum,GsetEnum);
-	GetDofList(&doflists,StokesApproximationEnum,GsetEnum);
-	this->parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
+	/*Get dof listof this element (HO dofs) and of the penta at base (SSA dofs): */
+	GetDofList(&doflistp,HOApproximationEnum,GsetEnum);
+	GetDofList(&doflists,FSApproximationEnum,GsetEnum);
+	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
 
 	/*Get node data: */
@@ -9487,40 +9487,40 @@
 
 	/*Use the dof list to index into the solution vector: */
-	for(i=0;i<numdofp;i++) pattyn_values[i]=solution[doflistp[i]];
-	for(i=0;i<numdofs;i++) stokes_values[i]=solution[doflists[i]];
+	for(i=0;i<numdofp;i++) HO_values[i]=solution[doflistp[i]];
+	for(i=0;i<numdofs;i++) FS_values[i]=solution[doflists[i]];
 
 	/*Transform solution in Cartesian Space*/
-	TransformSolutionCoord(&pattyn_values[0],this->nodes,NUMVERTICES,XYEnum);
-	TransformSolutionCoord(&stokes_values[0],this->nodes,NUMVERTICES,XYZPEnum);
+	TransformSolutionCoord(&HO_values[0],this->nodes,NUMVERTICES,XYEnum);
+	TransformSolutionCoord(&FS_values[0],this->nodes,NUMVERTICES,XYZPEnum);
 
 	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
 	for(i=0;i<NUMVERTICES;i++){
-		vx[i]=stokes_values[i*NDOF4+0]+pattyn_values[i*NDOF2+0];
-		vy[i]=stokes_values[i*NDOF4+1]+pattyn_values[i*NDOF2+1];
-		vzstokes[i]=stokes_values[i*NDOF4+2];
-		pressure[i]=stokes_values[i*NDOF4+3]*stokesreconditioning;
+		vx[i]=FS_values[i*NDOF4+0]+HO_values[i*NDOF2+0];
+		vy[i]=FS_values[i*NDOF4+1]+HO_values[i*NDOF2+1];
+		vzFS[i]=FS_values[i*NDOF4+2];
+		pressure[i]=FS_values[i*NDOF4+3]*FSreconditioning;
 
 		/*Check solution*/
 		if(xIsNan<IssmDouble>(vx[i]))       _error_("NaN found in solution vector");
 		if(xIsNan<IssmDouble>(vy[i]))       _error_("NaN found in solution vector");
-		if(xIsNan<IssmDouble>(vzstokes[i])) _error_("NaN found in solution vector");
+		if(xIsNan<IssmDouble>(vzFS[i])) _error_("NaN found in solution vector");
 		if(xIsNan<IssmDouble>(pressure[i])) _error_("NaN found in solution vector");
 	}
 
 	/*Get Vz*/
-	Input* vzpattyn_input=inputs->GetInput(VzPattynEnum);
-	if (vzpattyn_input){
-		if (vzpattyn_input->ObjectEnum()!=PentaInputEnum){
-			_error_("Cannot compute Vel as VzPattyn is of type " << EnumToStringx(vzpattyn_input->ObjectEnum()));
-		}
-		GetInputListOnVertices(&vzpattyn[0],VzPattynEnum);
+	Input* vzHO_input=inputs->GetInput(VzHOEnum);
+	if (vzHO_input){
+		if (vzHO_input->ObjectEnum()!=PentaInputEnum){
+			_error_("Cannot compute Vel as VzHO is of type " << EnumToStringx(vzHO_input->ObjectEnum()));
+		}
+		GetInputListOnVertices(&vzHO[0],VzHOEnum);
 	}
 	else{
-		_error_("Cannot update solution as VzPattyn is not present");
+		_error_("Cannot update solution as VzHO is not present");
 	}
 
 	/*Now Compute vel*/
 	for(i=0;i<NUMVERTICES;i++) {
-		vz[i]=vzpattyn[i]+vzstokes[i];
+		vz[i]=vzHO[i]+vzFS[i];
 		vel[i]=pow( pow(vx[i],2.0) + pow(vy[i],2.0) + pow(vz[i],2.0) , 0.5);
 	}
@@ -9537,5 +9537,5 @@
 	this->inputs->AddInput(new PentaInput(VyEnum,vy,P1Enum));
 	this->inputs->AddInput(new PentaInput(VzEnum,vz,P1Enum));
-	this->inputs->AddInput(new PentaInput(VzStokesEnum,vzstokes,P1Enum));
+	this->inputs->AddInput(new PentaInput(VzFSEnum,vzFS,P1Enum));
 	this->inputs->AddInput(new PentaInput(VelEnum,vel,P1Enum));
 	this->inputs->AddInput(new PentaInput(PressureEnum,pressure,P1Enum));
@@ -9546,6 +9546,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticHutter {{{*/
-void  Penta::InputUpdateFromSolutionDiagnosticHutter(IssmDouble* solution){
+/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticSIA {{{*/
+void  Penta::InputUpdateFromSolutionDiagnosticSIA(IssmDouble* solution){
 
 	const int    numdof=NDOF2*NUMVERTICES;
@@ -9621,7 +9621,7 @@
 	IssmDouble   vy[NUMVERTICES];
 	IssmDouble   vz[NUMVERTICES];
-	IssmDouble   vzmacayeal[NUMVERTICES];
-	IssmDouble   vzpattyn[NUMVERTICES];
-	IssmDouble   vzstokes[NUMVERTICES];
+	IssmDouble   vzSSA[NUMVERTICES];
+	IssmDouble   vzHO[NUMVERTICES];
+	IssmDouble   vzFS[NUMVERTICES];
 	IssmDouble   vel[NUMVERTICES];
 	IssmDouble   pressure[NUMVERTICES];
@@ -9630,7 +9630,7 @@
 	int*     doflist      = NULL;
 
-	/*Get the approximation and do nothing if the element in Stokes or None*/
+	/*Get the approximation and do nothing if the element in FS or None*/
 	inputs->GetInputValue(&approximation,ApproximationEnum);
-	if(approximation==StokesApproximationEnum || approximation==NoneApproximationEnum){
+	if(approximation==FSApproximationEnum || approximation==NoneApproximationEnum){
 		return;
 	}
@@ -9653,27 +9653,27 @@
 	GetInputListOnVertices(&vy[0],VyEnum,0.0); //default is 0
 
-	/*Do some modifications if we actually have a PattynStokes or MacAyealStokes element*/
-	if(approximation==PattynStokesApproximationEnum){
-		Input* vzstokes_input=inputs->GetInput(VzStokesEnum);
-		if (vzstokes_input){
-			if (vzstokes_input->ObjectEnum()!=PentaInputEnum) _error_("Cannot compute Vel as VzStokes is of type " << EnumToStringx(vzstokes_input->ObjectEnum()));
-			GetInputListOnVertices(&vzstokes[0],VzStokesEnum);
-		}
-		else _error_("Cannot compute Vz as VzStokes in not present in PattynStokes element");
+	/*Do some modifications if we actually have a HOFS or MacAyealFS element*/
+	if(approximation==HOFSApproximationEnum){
+		Input* vzFS_input=inputs->GetInput(VzFSEnum);
+		if (vzFS_input){
+			if (vzFS_input->ObjectEnum()!=PentaInputEnum) _error_("Cannot compute Vel as VzFS is of type " << EnumToStringx(vzFS_input->ObjectEnum()));
+			GetInputListOnVertices(&vzFS[0],VzFSEnum);
+		}
+		else _error_("Cannot compute Vz as VzFS in not present in HOFS element");
 		for(i=0;i<NUMVERTICES;i++){
-			vzpattyn[i]=vz[i];
-			vz[i]=vzpattyn[i]+vzstokes[i];
-		}
-	}
-	else if(approximation==MacAyealStokesApproximationEnum){
-		Input* vzstokes_input=inputs->GetInput(VzStokesEnum);
-		if (vzstokes_input){
-			if (vzstokes_input->ObjectEnum()!=PentaInputEnum) _error_("Cannot compute Vel as VzStokes is of type " << EnumToStringx(vzstokes_input->ObjectEnum()));
-			GetInputListOnVertices(&vzstokes[0],VzStokesEnum);
-		}
-		else _error_("Cannot compute Vz as VzStokes in not present in MacAyealStokes element");
+			vzHO[i]=vz[i];
+			vz[i]=vzHO[i]+vzFS[i];
+		}
+	}
+	else if(approximation==MacAyealFSApproximationEnum){
+		Input* vzFS_input=inputs->GetInput(VzFSEnum);
+		if (vzFS_input){
+			if (vzFS_input->ObjectEnum()!=PentaInputEnum) _error_("Cannot compute Vel as VzFS is of type " << EnumToStringx(vzFS_input->ObjectEnum()));
+			GetInputListOnVertices(&vzFS[0],VzFSEnum);
+		}
+		else _error_("Cannot compute Vz as VzFS in not present in MacAyealFS element");
 		for(i=0;i<NUMVERTICES;i++){
-			vzmacayeal[i]=vz[i];
-			vz[i]=vzmacayeal[i]+vzstokes[i];
+			vzSSA[i]=vz[i];
+			vz[i]=vzSSA[i]+vzFS[i];
 		}
 	}
@@ -9683,6 +9683,6 @@
 
 	/*For pressure: we have not computed pressure in this analysis, for this element. We are in 3D, 
-	 *so the pressure is just the pressure at the z elevation: except it this is a PattynStokes element */
-	if(approximation!=PattynStokesApproximationEnum &&  approximation!=MacAyealStokesApproximationEnum){
+	 *so the pressure is just the pressure at the z elevation: except it this is a HOFS element */
+	if(approximation!=HOFSApproximationEnum &&  approximation!=MacAyealFSApproximationEnum){
 		rho_ice=matpar->GetRhoIce();
 		g=matpar->GetG();
@@ -9695,13 +9695,13 @@
 	this->inputs->ChangeEnum(VzEnum,VzPicardEnum);
 
-	if(approximation!=PattynStokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum){
+	if(approximation!=HOFSApproximationEnum && approximation!=MacAyealFSApproximationEnum){
 		this->inputs->ChangeEnum(PressureEnum,PressurePicardEnum);
 		this->inputs->AddInput(new PentaInput(PressureEnum,pressure,P1Enum));
 	}
-	else if(approximation==PattynStokesApproximationEnum){
-		this->inputs->AddInput(new PentaInput(VzPattynEnum,vzpattyn,P1Enum));
-	}
-	else if(approximation==MacAyealStokesApproximationEnum){
-		this->inputs->AddInput(new PentaInput(VzMacAyealEnum,vzmacayeal,P1Enum));
+	else if(approximation==HOFSApproximationEnum){
+		this->inputs->AddInput(new PentaInput(VzHOEnum,vzHO,P1Enum));
+	}
+	else if(approximation==MacAyealFSApproximationEnum){
+		this->inputs->AddInput(new PentaInput(VzMacAyealEnum,vzSSA,P1Enum));
 	}
 	this->inputs->AddInput(new PentaInput(VzEnum,vz,P1Enum));
@@ -9712,6 +9712,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticStokes {{{*/
-void  Penta::InputUpdateFromSolutionDiagnosticStokes(IssmDouble* solution){
+/*FUNCTION Penta::InputUpdateFromSolutionDiagnosticFS {{{*/
+void  Penta::InputUpdateFromSolutionDiagnosticFS(IssmDouble* solution){
 
 	const int numdof=NDOF4*NUMVERTICES;
@@ -9724,9 +9724,9 @@
 	IssmDouble  vel[NUMVERTICES];
 	IssmDouble  pressure[NUMVERTICES];
-	IssmDouble  stokesreconditioning;
+	IssmDouble  FSreconditioning;
 	int*    doflist=NULL;
 
 	/*Get dof list: */
-	GetDofList(&doflist,StokesApproximationEnum,GsetEnum);
+	GetDofList(&doflist,FSApproximationEnum,GsetEnum);
 
 	/*Use the dof list to index into the solution vector: */
@@ -9751,6 +9751,6 @@
 
 	/*Recondition pressure and compute vel: */
-	this->parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
-	for(i=0;i<NUMVERTICES;i++) pressure[i]=pressure[i]*stokesreconditioning;
+	this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum);
+	for(i=0;i<NUMVERTICES;i++) pressure[i]=pressure[i]*FSreconditioning;
 	for(i=0;i<NUMVERTICES;i++) vel[i]=pow( pow(vx[i],2.0) + pow(vy[i],2.0) + pow(vz[i],2.0) , 0.5);
 
Index: issm/trunk-jpl/src/c/classes/Elements/Penta.h
===================================================================
--- issm/trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15563)
+++ issm/trunk-jpl/src/c/classes/Elements/Penta.h	(revision 15564)
@@ -145,9 +145,9 @@
 		void   Gradj(Vector<IssmDouble>* gradient,int control_type,int control_index);
 		void   GradjDragMacAyeal(Vector<IssmDouble>* gradient,int control_index);
-		void   GradjDragPattyn(Vector<IssmDouble>* gradient,int control_index);
-		void   GradjDragStokes(Vector<IssmDouble>* gradient,int control_index);
+		void   GradjDragHO(Vector<IssmDouble>* gradient,int control_index);
+		void   GradjDragFS(Vector<IssmDouble>* gradient,int control_index);
 		void   GradjBbarMacAyeal(Vector<IssmDouble>* gradient,int control_index);
-		void   GradjBbarPattyn(Vector<IssmDouble>* gradient,int control_index);
-		void   GradjBbarStokes(Vector<IssmDouble>* gradient,int control_index);
+		void   GradjBbarHO(Vector<IssmDouble>* gradient,int control_index);
+		void   GradjBbarFS(Vector<IssmDouble>* gradient,int control_index);
 		void   GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data);
 		void   SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index);
@@ -197,5 +197,5 @@
 		void	         GetSolutionFromInputsEnthalpy(Vector<IssmDouble>* solutiong);
 		IssmDouble     GetStabilizationParameter(IssmDouble u, IssmDouble v, IssmDouble w, IssmDouble diameter, IssmDouble kappa);
-		void    GetStrainRate3dPattyn(IssmDouble* epsilon,IssmDouble* xyz_list, GaussPenta* gauss, Input* vx_input, Input* vy_input);
+		void    GetStrainRate3dHO(IssmDouble* epsilon,IssmDouble* xyz_list, GaussPenta* gauss, Input* vx_input, Input* vy_input);
 		void    GetStrainRate3d(IssmDouble* epsilon,IssmDouble* xyz_list, GaussPenta* gauss, Input* vx_input, Input* vy_input, Input* vz_input);
 		Penta*  GetUpperElement(void);
@@ -215,6 +215,6 @@
 		bool    IsOnWater(void); 
 		IssmDouble  MinEdgeLength(IssmDouble xyz_list[6][3]);
-		void	  ReduceMatrixStokes(IssmDouble* Ke_reduced, IssmDouble* Ke_temp);
-		void	  ReduceVectorStokes(IssmDouble* Pe_reduced, IssmDouble* Ke_temp, IssmDouble* Pe_temp);
+		void	  ReduceMatrixFS(IssmDouble* Ke_reduced, IssmDouble* Ke_temp);
+		void	  ReduceVectorFS(IssmDouble* Pe_reduced, IssmDouble* Ke_temp, IssmDouble* Pe_temp);
 		void	  SetClone(int* minranks);
 		Tria*	  SpawnTria(int g0, int g1, int g2);
@@ -223,76 +223,76 @@
 
 		#ifdef _HAVE_DIAGNOSTIC_
-		ElementMatrix* CreateKMatrixCouplingMacAyealPattyn(void);
-		ElementMatrix* CreateKMatrixCouplingMacAyealPattynViscous(void);
-		ElementMatrix* CreateKMatrixCouplingMacAyealPattynFriction(void);
-		ElementMatrix* CreateKMatrixCouplingMacAyealStokes(void);
-		ElementMatrix* CreateKMatrixCouplingMacAyealStokesViscous(void);
-		ElementMatrix* CreateKMatrixCouplingMacAyealStokesFriction(void);
-		ElementMatrix* CreateKMatrixCouplingPattynStokes(void);
+		ElementMatrix* CreateKMatrixCouplingMacAyealHO(void);
+		ElementMatrix* CreateKMatrixCouplingMacAyealHOViscous(void);
+		ElementMatrix* CreateKMatrixCouplingMacAyealHOFriction(void);
+		ElementMatrix* CreateKMatrixCouplingMacAyealFS(void);
+		ElementMatrix* CreateKMatrixCouplingMacAyealFSViscous(void);
+		ElementMatrix* CreateKMatrixCouplingMacAyealFSFriction(void);
+		ElementMatrix* CreateKMatrixCouplingHOFS(void);
 		ElementMatrix* CreateKMatrixDiagnosticHoriz(void);
 		ElementMatrix* CreateKMatrixAdjointHoriz(void);
 		ElementVector* CreateDVectorDiagnosticHoriz(void);
-		ElementVector* CreateDVectorDiagnosticStokes(void);
-		ElementMatrix* CreateKMatrixDiagnosticHutter(void);
+		ElementVector* CreateDVectorDiagnosticFS(void);
+		ElementMatrix* CreateKMatrixDiagnosticSIA(void);
 		ElementMatrix* CreateKMatrixDiagnosticMacAyeal2d(void);
 		ElementMatrix* CreateKMatrixDiagnosticMacAyeal3d(void);
 		ElementMatrix* CreateKMatrixDiagnosticMacAyeal3dViscous(void);
 		ElementMatrix* CreateKMatrixDiagnosticMacAyeal3dFriction(void);
-		ElementMatrix* CreateKMatrixDiagnosticMacAyealPattyn(void);
-		ElementMatrix* CreateKMatrixDiagnosticMacAyealStokes(void);
+		ElementMatrix* CreateKMatrixDiagnosticMacAyealHO(void);
+		ElementMatrix* CreateKMatrixDiagnosticMacAyealFS(void);
 		ElementMatrix* CreateKMatrixDiagnosticL1L2(void);
 		ElementMatrix* CreateKMatrixDiagnosticL1L2Viscous(void);
 		ElementMatrix* CreateKMatrixDiagnosticL1L2Friction(void);
-		ElementMatrix* CreateKMatrixDiagnosticPattyn(void);
-		ElementMatrix* CreateKMatrixDiagnosticPattynViscous(void);
-		ElementMatrix* CreateKMatrixDiagnosticPattynFriction(void);
-		ElementMatrix* CreateKMatrixDiagnosticPattynStokes(void);
-		ElementMatrix* CreateKMatrixDiagnosticStokes(void);
-		ElementMatrix* CreateKMatrixDiagnosticStokesViscous(void);
-		ElementMatrix* CreateKMatrixDiagnosticStokesGLSViscous(void);
-		ElementMatrix* CreateKMatrixDiagnosticStokesFriction(void);
-		ElementMatrix* CreateKMatrixDiagnosticStokesGLSFriction(void);
+		ElementMatrix* CreateKMatrixDiagnosticHO(void);
+		ElementMatrix* CreateKMatrixDiagnosticHOViscous(void);
+		ElementMatrix* CreateKMatrixDiagnosticHOFriction(void);
+		ElementMatrix* CreateKMatrixDiagnosticHOFS(void);
+		ElementMatrix* CreateKMatrixDiagnosticFS(void);
+		ElementMatrix* CreateKMatrixDiagnosticFSViscous(void);
+		ElementMatrix* CreateKMatrixDiagnosticFSGLSViscous(void);
+		ElementMatrix* CreateKMatrixDiagnosticFSFriction(void);
+		ElementMatrix* CreateKMatrixDiagnosticFSGLSFriction(void);
 		ElementMatrix* CreateKMatrixDiagnosticVert(void);
 		ElementMatrix* CreateKMatrixDiagnosticVertVolume(void);
 		ElementMatrix* CreateKMatrixDiagnosticVertSurface(void);
 		ElementMatrix* CreateJacobianDiagnosticHoriz(void);
-		ElementMatrix* CreateJacobianDiagnosticMacayeal2d(void);
-		ElementMatrix* CreateJacobianDiagnosticPattyn(void);
-		ElementMatrix* CreateJacobianDiagnosticStokes(void);
+		ElementMatrix* CreateJacobianDiagnosticSSA2d(void);
+		ElementMatrix* CreateJacobianDiagnosticHO(void);
+		ElementMatrix* CreateJacobianDiagnosticFS(void);
 		void           InputUpdateFromSolutionDiagnosticHoriz( IssmDouble* solutiong);
 		void           InputUpdateFromSolutionDiagnosticMacAyeal( IssmDouble* solutiong);
-		void           InputUpdateFromSolutionDiagnosticMacAyealPattyn( IssmDouble* solutiong);
-		void           InputUpdateFromSolutionDiagnosticMacAyealStokes( IssmDouble* solutiong);
+		void           InputUpdateFromSolutionDiagnosticMacAyealHO( IssmDouble* solutiong);
+		void           InputUpdateFromSolutionDiagnosticMacAyealFS( IssmDouble* solutiong);
 		void           InputUpdateFromSolutionDiagnosticL1L2( IssmDouble* solutiong);
-		void           InputUpdateFromSolutionDiagnosticPattyn( IssmDouble* solutiong);
-		void           InputUpdateFromSolutionDiagnosticPattynStokes( IssmDouble* solutiong);
-		void           InputUpdateFromSolutionDiagnosticHutter( IssmDouble* solutiong);
+		void           InputUpdateFromSolutionDiagnosticHO( IssmDouble* solutiong);
+		void           InputUpdateFromSolutionDiagnosticHOFS( IssmDouble* solutiong);
+		void           InputUpdateFromSolutionDiagnosticSIA( IssmDouble* solutiong);
 		void           InputUpdateFromSolutionDiagnosticVert( IssmDouble* solutiong);
-		void           InputUpdateFromSolutionDiagnosticStokes( IssmDouble* solutiong);
+		void           InputUpdateFromSolutionDiagnosticFS( IssmDouble* solutiong);
 		void	         GetSolutionFromInputsDiagnosticHoriz(Vector<IssmDouble>* solutiong);
-		void	         GetSolutionFromInputsDiagnosticHutter(Vector<IssmDouble>* solutiong);
-		void	         GetSolutionFromInputsDiagnosticStokes(Vector<IssmDouble>* solutiong);
+		void	         GetSolutionFromInputsDiagnosticSIA(Vector<IssmDouble>* solutiong);
+		void	         GetSolutionFromInputsDiagnosticFS(Vector<IssmDouble>* solutiong);
 		void	         GetSolutionFromInputsDiagnosticVert(Vector<IssmDouble>* solutiong);
-		ElementVector* CreatePVectorCouplingMacAyealStokes(void);
-		ElementVector* CreatePVectorCouplingMacAyealStokesViscous(void);
-		ElementVector* CreatePVectorCouplingMacAyealStokesFriction(void);
-		ElementVector* CreatePVectorCouplingPattynStokes(void);
-		ElementVector* CreatePVectorCouplingPattynStokesViscous(void);
-		ElementVector* CreatePVectorCouplingPattynStokesFriction(void);
+		ElementVector* CreatePVectorCouplingMacAyealFS(void);
+		ElementVector* CreatePVectorCouplingMacAyealFSViscous(void);
+		ElementVector* CreatePVectorCouplingMacAyealFSFriction(void);
+		ElementVector* CreatePVectorCouplingHOFS(void);
+		ElementVector* CreatePVectorCouplingHOFSViscous(void);
+		ElementVector* CreatePVectorCouplingHOFSFriction(void);
 		ElementVector* CreatePVectorDiagnosticHoriz(void);
-		ElementVector* CreatePVectorDiagnosticHutter(void);
+		ElementVector* CreatePVectorDiagnosticSIA(void);
 		ElementVector* CreatePVectorDiagnosticMacAyeal(void);
-		ElementVector* CreatePVectorDiagnosticMacAyealPattyn(void);
-		ElementVector* CreatePVectorDiagnosticMacAyealStokes(void);
+		ElementVector* CreatePVectorDiagnosticMacAyealHO(void);
+		ElementVector* CreatePVectorDiagnosticMacAyealFS(void);
 		ElementVector* CreatePVectorDiagnosticL1L2(void);
-		ElementVector* CreatePVectorDiagnosticPattyn(void);
-		ElementVector* CreatePVectorDiagnosticPattynDrivingStress(void);
-		ElementVector* CreatePVectorDiagnosticPattynFront(void);
-		ElementVector* CreatePVectorDiagnosticPattynStokes(void);
-		ElementVector* CreatePVectorDiagnosticStokes(void);
-		ElementVector* CreatePVectorDiagnosticStokesFront(void);
-		ElementVector* CreatePVectorDiagnosticStokesViscous(void);
-		ElementVector* CreatePVectorDiagnosticStokesGLSViscous(void);
-		ElementVector* CreatePVectorDiagnosticStokesShelf(void);
+		ElementVector* CreatePVectorDiagnosticHO(void);
+		ElementVector* CreatePVectorDiagnosticHODrivingStress(void);
+		ElementVector* CreatePVectorDiagnosticHOFront(void);
+		ElementVector* CreatePVectorDiagnosticHOFS(void);
+		ElementVector* CreatePVectorDiagnosticFS(void);
+		ElementVector* CreatePVectorDiagnosticFSFront(void);
+		ElementVector* CreatePVectorDiagnosticFSViscous(void);
+		ElementVector* CreatePVectorDiagnosticFSGLSViscous(void);
+		ElementVector* CreatePVectorDiagnosticFSShelf(void);
 		ElementVector* CreatePVectorDiagnosticVert(void);
 		ElementVector* CreatePVectorDiagnosticVertVolume(void);
@@ -304,11 +304,11 @@
 		ElementVector* CreatePVectorAdjointHoriz(void);
 		ElementMatrix* CreateKMatrixAdjointMacAyeal2d(void);
-		ElementMatrix* CreateKMatrixAdjointPattyn(void);
-		ElementMatrix* CreateKMatrixAdjointStokes(void);
+		ElementMatrix* CreateKMatrixAdjointHO(void);
+		ElementMatrix* CreateKMatrixAdjointFS(void);
 		ElementVector* CreatePVectorAdjointMacAyeal(void);
-		ElementVector* CreatePVectorAdjointPattyn(void);
-		ElementVector* CreatePVectorAdjointStokes(void);
+		ElementVector* CreatePVectorAdjointHO(void);
+		ElementVector* CreatePVectorAdjointFS(void);
 		void    InputUpdateFromSolutionAdjointHoriz( IssmDouble* solutiong);
-		void    InputUpdateFromSolutionAdjointStokes( IssmDouble* solutiong);
+		void    InputUpdateFromSolutionAdjointFS( IssmDouble* solutiong);
 		#endif
 
Index: issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp	(revision 15564)
@@ -54,6 +54,6 @@
 
 /*Reference Element numerics*/
-/*FUNCTION PentaRef::GetBMacAyealPattyn {{{*/
-void PentaRef::GetBMacAyealPattyn(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){
+/*FUNCTION PentaRef::GetBMacAyealHO {{{*/
+void PentaRef::GetBMacAyealHO(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){
 	/*Compute B  matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 5*NDOF2. 
 	 * For node i, Bi can be expressed in the actual coordinate system
@@ -85,6 +85,6 @@
 }
 /*}}}*/
-/*FUNCTION PentaRef::GetBMacAyealStokes{{{*/
-void PentaRef::GetBMacAyealStokes(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){
+/*FUNCTION PentaRef::GetBMacAyealFS{{{*/
+void PentaRef::GetBMacAyealFS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){
 	/*Compute B  matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 5*NDOF2. 
 	 * For node i, Bi can be expressed in the actual coordinate system
@@ -131,6 +131,6 @@
 }
 /*}}}*/
-/*FUNCTION PentaRef::GetBPattyn {{{*/
-void PentaRef::GetBPattyn(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){
+/*FUNCTION PentaRef::GetBHO {{{*/
+void PentaRef::GetBHO(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){
 	/*Compute B  matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 5*NDOF2. 
 	 * For node i, Bi can be expressed in the actual coordinate system
@@ -171,6 +171,6 @@
 }
 /*}}}*/
-/*FUNCTION PentaRef::GetBprimePattyn {{{*/
-void PentaRef::GetBprimePattyn(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss_coord){
+/*FUNCTION PentaRef::GetBprimeHO {{{*/
+void PentaRef::GetBprimeHO(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss_coord){
 	/*Compute B  prime matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 5*NDOF2. 
 	 * For node i, Bi can be expressed in the actual coordinate system
@@ -209,6 +209,6 @@
 }
 /*}}}*/
-/*FUNCTION PentaRef::GetBprimeMacAyealStokes{{{*/
-void PentaRef::GetBprimeMacAyealStokes(IssmDouble* Bprime, IssmDouble* xyz_list, GaussPenta* gauss){
+/*FUNCTION PentaRef::GetBprimeMacAyealFS{{{*/
+void PentaRef::GetBprimeMacAyealFS(IssmDouble* Bprime, IssmDouble* xyz_list, GaussPenta* gauss){
 	/*Compute Bprime  matrix. Bprime=[Bprime1 Bprime2 Bprime3 Bprime4 Bprime5 Bprime6] where Bprimei is of size 5*NDOF2. 
 	 * For node i, Bprimei can be expressed in the actual coordinate system
@@ -249,6 +249,6 @@
 }
 /*}}}*/
-/*FUNCTION PentaRef::GetBStokes {{{*/
-void PentaRef::GetBStokes(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){
+/*FUNCTION PentaRef::GetBFS {{{*/
+void PentaRef::GetBFS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){
 
 	/*Compute B  matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 3*NDOF4. 
@@ -316,6 +316,6 @@
 }
 /*}}}*/
-/*FUNCTION PentaRef::GetBStokesGLS {{{*/
-void PentaRef::GetBStokesGLS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){
+/*FUNCTION PentaRef::GetBFSGLS {{{*/
+void PentaRef::GetBFSGLS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){
 
 	/*Compute B  matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 3*NDOF4. 
@@ -382,6 +382,6 @@
 }
 /*}}}*/
-/*FUNCTION PentaRef::GetBprimeStokes {{{*/
-void PentaRef::GetBprimeStokes(IssmDouble* B_prime, IssmDouble* xyz_list, GaussPenta* gauss){
+/*FUNCTION PentaRef::GetBprimeFS {{{*/
+void PentaRef::GetBprimeFS(IssmDouble* B_prime, IssmDouble* xyz_list, GaussPenta* gauss){
 	/*	Compute B'  matrix. B'=[B1' B2' B3' B4' B5' B6' Bb'] where Bi' is of size 3*NDOF2. 
 	 *	For node i, Bi' can be expressed in the actual coordinate system
@@ -449,6 +449,6 @@
 }
 /*}}}*/
-/*FUNCTION PentaRef::GetBprimeStokesGLS {{{*/
-void PentaRef::GetBprimeStokesGLS(IssmDouble* B_prime, IssmDouble* xyz_list, GaussPenta* gauss){
+/*FUNCTION PentaRef::GetBprimeFSGLS {{{*/
+void PentaRef::GetBprimeFSGLS(IssmDouble* B_prime, IssmDouble* xyz_list, GaussPenta* gauss){
 	/*	Compute B'  matrix. B'=[B1' B2' B3' B4' B5' B6' Bb'] where Bi' is of size 3*NDOF2. 
 	 *	For node i, Bi' can be expressed in the actual coordinate system
@@ -618,6 +618,6 @@
 }
 /*}}}*/
-/*FUNCTION PentaRef::GetBPattynFriction{{{*/
-void PentaRef::GetBPattynFriction(IssmDouble* B, GaussPenta* gauss){
+/*FUNCTION PentaRef::GetBHOFriction{{{*/
+void PentaRef::GetBHOFriction(IssmDouble* B, GaussPenta* gauss){
 	/*Compute B  matrix. B=[B1 B2 B3] where Bi is square and of size 2x2. 
 	 ** For node i, Bi can be expressed in the actual coordinate system
@@ -642,6 +642,6 @@
 } 
 /*}}}*/
-/*FUNCTION PentaRef::GetLStokes{{{*/
-void PentaRef::GetLStokes(IssmDouble* LStokes, GaussPenta* gauss){
+/*FUNCTION PentaRef::GetLFS{{{*/
+void PentaRef::GetLFS(IssmDouble* LFS, GaussPenta* gauss){
 	/* Compute L  matrix. L=[L1 L2 L3] where Li is square and of size numdof. 
 	 * For node i, Li can be expressed in the actual coordinate system
@@ -655,27 +655,27 @@
 
 	const int num_dof=4;
-	IssmDouble l1l2l3[NUMNODESP1_2d];
-
-	/*Get l1l2l3 in actual coordinate system: */
-	l1l2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
-	l1l2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
-	l1l2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
-
-	/*Build LStokes: */
+	IssmDouble L1L2l3[NUMNODESP1_2d];
+
+	/*Get L1L2l3 in actual coordinate system: */
+	L1L2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
+	L1L2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
+	L1L2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
+
+	/*Build LFS: */
 	for(int i=0;i<3;i++){
-		LStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = l1l2l3[i];
-		LStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.;
-		LStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+2] = 0.;
-		LStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+3] = 0.;
-
-		LStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.;
-		LStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = l1l2l3[i];
-		LStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+2] = 0.;
-		LStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+3] = 0.;
-	}
-}
-/*}}}*/
-/*FUNCTION PentaRef::GetLprimeStokes {{{*/
-void PentaRef::GetLprimeStokes(IssmDouble* LprimeStokes, IssmDouble* xyz_list, GaussPenta* gauss){
+		LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = L1L2l3[i];
+		LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.;
+		LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+2] = 0.;
+		LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+3] = 0.;
+
+		LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.;
+		LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = L1L2l3[i];
+		LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+2] = 0.;
+		LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+3] = 0.;
+	}
+}
+/*}}}*/
+/*FUNCTION PentaRef::GetLprimeFS {{{*/
+void PentaRef::GetLprimeFS(IssmDouble* LprimeFS, IssmDouble* xyz_list, GaussPenta* gauss){
 	/* Compute Lprime  matrix. Lprime=[Lp1 Lp2 Lp3] where Lpi is square and of size numdof. 
 	 * For node i, Lpi can be expressed in the actual coordinate system
@@ -715,77 +715,77 @@
 	int num_dof=4;
 
-	IssmDouble l1l2l3[NUMNODESP1_2d];
+	IssmDouble L1L2l3[NUMNODESP1_2d];
 	IssmDouble dbasis[3][NUMNODESP1];
 
-	/*Get l1l2l3 in actual coordinate system: */
-	l1l2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
-	l1l2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
-	l1l2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
+	/*Get L1L2l3 in actual coordinate system: */
+	L1L2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
+	L1L2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
+	L1L2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
 
 	GetNodalFunctionsP1Derivatives(&dbasis[0][0],xyz_list,gauss);
 
-	/*Build LprimeStokes: */
+	/*Build LprimeFS: */
 	for(int i=0;i<3;i++){
-		LprimeStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+0]  = l1l2l3[i];
-		LprimeStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+1]  = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+2]  = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+3]  = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+0]  = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+1]  = l1l2l3[i];
-		LprimeStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+2]  = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+3]  = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+0]  = l1l2l3[i];
-		LprimeStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+1]  = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+2]  = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+3]  = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+0]  = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+1]  = l1l2l3[i];
-		LprimeStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+2]  = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+3]  = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*4+num_dof*i+0]  = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*4+num_dof*i+1]  = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*4+num_dof*i+2]  = l1l2l3[i];
-		LprimeStokes[num_dof*NUMNODESP1_2d*4+num_dof*i+3]  = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*5+num_dof*i+0]  = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*5+num_dof*i+1]  = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*5+num_dof*i+2]  = l1l2l3[i];
-		LprimeStokes[num_dof*NUMNODESP1_2d*5+num_dof*i+3]  = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*6+num_dof*i+0]  = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*6+num_dof*i+1]  = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*6+num_dof*i+2]  = dbasis[2][i];
-		LprimeStokes[num_dof*NUMNODESP1_2d*6+num_dof*i+3]  = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*7+num_dof*i+0]  = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*7+num_dof*i+1]  = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*7+num_dof*i+2]  = dbasis[2][i];
-		LprimeStokes[num_dof*NUMNODESP1_2d*7+num_dof*i+3]  = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*8+num_dof*i+0]  = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*8+num_dof*i+1]  = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*8+num_dof*i+2]  = dbasis[2][i];
-		LprimeStokes[num_dof*NUMNODESP1_2d*8+num_dof*i+3]  = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*9+num_dof*i+0]  = dbasis[2][i];
-		LprimeStokes[num_dof*NUMNODESP1_2d*9+num_dof*i+1]  = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*9+num_dof*i+2]  = dbasis[0][i];
-		LprimeStokes[num_dof*NUMNODESP1_2d*9+num_dof*i+3]  = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*10+num_dof*i+0] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*10+num_dof*i+1] = dbasis[2][i];
-		LprimeStokes[num_dof*NUMNODESP1_2d*10+num_dof*i+2] = dbasis[1][i];
-		LprimeStokes[num_dof*NUMNODESP1_2d*10+num_dof*i+3] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*11+num_dof*i+0] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*11+num_dof*i+1] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*11+num_dof*i+2] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*11+num_dof*i+3] = l1l2l3[i];
-		LprimeStokes[num_dof*NUMNODESP1_2d*12+num_dof*i+0] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*12+num_dof*i+1] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*12+num_dof*i+2] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*12+num_dof*i+3] = l1l2l3[i];
-		LprimeStokes[num_dof*NUMNODESP1_2d*13+num_dof*i+0] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*13+num_dof*i+1] = 0;
-		LprimeStokes[num_dof*NUMNODESP1_2d*13+num_dof*i+2] = 0;
-		LprimeStokes[num_dof*NUMNODESP1_2d*13+num_dof*i+3] = l1l2l3[i];
-	}
-}
-/*}}}*/
-/*FUNCTION PentaRef::GetLMacAyealStokes {{{*/
-void PentaRef::GetLMacAyealStokes(IssmDouble* LStokes, GaussPenta* gauss){
+		LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+0]  = L1L2l3[i];
+		LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+1]  = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+2]  = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+3]  = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+0]  = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+1]  = L1L2l3[i];
+		LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+2]  = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+3]  = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+0]  = L1L2l3[i];
+		LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+1]  = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+2]  = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+3]  = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+0]  = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+1]  = L1L2l3[i];
+		LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+2]  = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+3]  = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*4+num_dof*i+0]  = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*4+num_dof*i+1]  = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*4+num_dof*i+2]  = L1L2l3[i];
+		LprimeFS[num_dof*NUMNODESP1_2d*4+num_dof*i+3]  = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*5+num_dof*i+0]  = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*5+num_dof*i+1]  = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*5+num_dof*i+2]  = L1L2l3[i];
+		LprimeFS[num_dof*NUMNODESP1_2d*5+num_dof*i+3]  = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*6+num_dof*i+0]  = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*6+num_dof*i+1]  = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*6+num_dof*i+2]  = dbasis[2][i];
+		LprimeFS[num_dof*NUMNODESP1_2d*6+num_dof*i+3]  = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*7+num_dof*i+0]  = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*7+num_dof*i+1]  = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*7+num_dof*i+2]  = dbasis[2][i];
+		LprimeFS[num_dof*NUMNODESP1_2d*7+num_dof*i+3]  = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*8+num_dof*i+0]  = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*8+num_dof*i+1]  = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*8+num_dof*i+2]  = dbasis[2][i];
+		LprimeFS[num_dof*NUMNODESP1_2d*8+num_dof*i+3]  = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*9+num_dof*i+0]  = dbasis[2][i];
+		LprimeFS[num_dof*NUMNODESP1_2d*9+num_dof*i+1]  = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*9+num_dof*i+2]  = dbasis[0][i];
+		LprimeFS[num_dof*NUMNODESP1_2d*9+num_dof*i+3]  = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*10+num_dof*i+0] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*10+num_dof*i+1] = dbasis[2][i];
+		LprimeFS[num_dof*NUMNODESP1_2d*10+num_dof*i+2] = dbasis[1][i];
+		LprimeFS[num_dof*NUMNODESP1_2d*10+num_dof*i+3] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*11+num_dof*i+0] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*11+num_dof*i+1] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*11+num_dof*i+2] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*11+num_dof*i+3] = L1L2l3[i];
+		LprimeFS[num_dof*NUMNODESP1_2d*12+num_dof*i+0] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*12+num_dof*i+1] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*12+num_dof*i+2] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*12+num_dof*i+3] = L1L2l3[i];
+		LprimeFS[num_dof*NUMNODESP1_2d*13+num_dof*i+0] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*13+num_dof*i+1] = 0;
+		LprimeFS[num_dof*NUMNODESP1_2d*13+num_dof*i+2] = 0;
+		LprimeFS[num_dof*NUMNODESP1_2d*13+num_dof*i+3] = L1L2l3[i];
+	}
+}
+/*}}}*/
+/*FUNCTION PentaRef::GetLMacAyealFS {{{*/
+void PentaRef::GetLMacAyealFS(IssmDouble* LFS, GaussPenta* gauss){
 	/*
 	 * Compute L  matrix. L=[L1 L2 L3] where Li is square and of size numdof. 
@@ -804,34 +804,34 @@
 
 	int num_dof=2;
-	IssmDouble l1l2l3[NUMNODESP1_2d];
-
-	/*Get l1l2l3 in actual coordinate system: */
-	l1l2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
-	l1l2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
-	l1l2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
-
-	/*Build LStokes: */
+	IssmDouble L1L2l3[NUMNODESP1_2d];
+
+	/*Get L1L2l3 in actual coordinate system: */
+	L1L2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
+	L1L2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
+	L1L2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
+
+	/*Build LFS: */
 	for(int i=0;i<3;i++){
-		LStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = l1l2l3[i];
-		LStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0;
-		LStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0;
-		LStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = l1l2l3[i];
-		LStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+0] = l1l2l3[i];
-		LStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+1] = 0;
-		LStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+0] = 0;
-		LStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+1] = l1l2l3[i];
-		LStokes[num_dof*NUMNODESP1_2d*4+num_dof*i+0] = l1l2l3[i];
-		LStokes[num_dof*NUMNODESP1_2d*4+num_dof*i+1] = 0;
-		LStokes[num_dof*NUMNODESP1_2d*5+num_dof*i+0] = 0;
-		LStokes[num_dof*NUMNODESP1_2d*5+num_dof*i+1] = l1l2l3[i];
-		LStokes[num_dof*NUMNODESP1_2d*6+num_dof*i+0] = l1l2l3[i];
-		LStokes[num_dof*NUMNODESP1_2d*6+num_dof*i+1] = 0;
-		LStokes[num_dof*NUMNODESP1_2d*7+num_dof*i+0] = 0;
-		LStokes[num_dof*NUMNODESP1_2d*7+num_dof*i+1] = l1l2l3[i];
-	}
-}
-/*}}}*/
-/*FUNCTION PentaRef::GetLprimeMacAyealStokes {{{*/
-void PentaRef::GetLprimeMacAyealStokes(IssmDouble* LprimeStokes, IssmDouble* xyz_list, GaussPenta* gauss){
+		LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = L1L2l3[i];
+		LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0;
+		LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0;
+		LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = L1L2l3[i];
+		LFS[num_dof*NUMNODESP1_2d*2+num_dof*i+0] = L1L2l3[i];
+		LFS[num_dof*NUMNODESP1_2d*2+num_dof*i+1] = 0;
+		LFS[num_dof*NUMNODESP1_2d*3+num_dof*i+0] = 0;
+		LFS[num_dof*NUMNODESP1_2d*3+num_dof*i+1] = L1L2l3[i];
+		LFS[num_dof*NUMNODESP1_2d*4+num_dof*i+0] = L1L2l3[i];
+		LFS[num_dof*NUMNODESP1_2d*4+num_dof*i+1] = 0;
+		LFS[num_dof*NUMNODESP1_2d*5+num_dof*i+0] = 0;
+		LFS[num_dof*NUMNODESP1_2d*5+num_dof*i+1] = L1L2l3[i];
+		LFS[num_dof*NUMNODESP1_2d*6+num_dof*i+0] = L1L2l3[i];
+		LFS[num_dof*NUMNODESP1_2d*6+num_dof*i+1] = 0;
+		LFS[num_dof*NUMNODESP1_2d*7+num_dof*i+0] = 0;
+		LFS[num_dof*NUMNODESP1_2d*7+num_dof*i+1] = L1L2l3[i];
+	}
+}
+/*}}}*/
+/*FUNCTION PentaRef::GetLprimeMacAyealFS {{{*/
+void PentaRef::GetLprimeMacAyealFS(IssmDouble* LprimeFS, IssmDouble* xyz_list, GaussPenta* gauss){
 	/* Compute Lprime  matrix. Lprime=[Lp1 Lp2 Lp3] where Lpi is square and of size numdof. 
 	 * For node i, Lpi can be expressed in the actual coordinate system
@@ -848,53 +848,53 @@
 	 */
 	int num_dof=4;
-	IssmDouble l1l2l3[NUMNODESP1_2d];
+	IssmDouble L1L2l3[NUMNODESP1_2d];
 	IssmDouble dbasis[3][NUMNODESP1];
 
-	/*Get l1l2l3 in actual coordinate system: */
-	l1l2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
-	l1l2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
-	l1l2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
+	/*Get L1L2l3 in actual coordinate system: */
+	L1L2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
+	L1L2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
+	L1L2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
 
 	GetNodalFunctionsP1Derivatives(&dbasis[0][0],xyz_list,gauss);
 
-	/*Build LprimeStokes: */
+	/*Build LprimeFS: */
 	for(int i=0;i<3;i++){
-		LprimeStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = l1l2l3[i];
-		LprimeStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+2] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+3] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = l1l2l3[i];
-		LprimeStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+2] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+3] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+0] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+1] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+2] = l1l2l3[i];
-		LprimeStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+3] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+0] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+1] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+2] = l1l2l3[i];
-		LprimeStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+3] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*4+num_dof*i+0] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*4+num_dof*i+1] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*4+num_dof*i+2] = dbasis[2][i];
-		LprimeStokes[num_dof*NUMNODESP1_2d*4+num_dof*i+3] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*5+num_dof*i+0] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*5+num_dof*i+1] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*5+num_dof*i+2] = dbasis[2][i];
-		LprimeStokes[num_dof*NUMNODESP1_2d*5+num_dof*i+3] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*6+num_dof*i+0] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*6+num_dof*i+1] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*6+num_dof*i+2] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*6+num_dof*i+3] = l1l2l3[i];
-		LprimeStokes[num_dof*NUMNODESP1_2d*7+num_dof*i+0] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*7+num_dof*i+1] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*7+num_dof*i+2] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*7+num_dof*i+3] = l1l2l3[i];
-	}
-}
-/*}}}*/
-/*FUNCTION PentaRef::GetLStokesMacAyeal {{{*/
-void PentaRef::GetLStokesMacAyeal(IssmDouble* LStokes, GaussPenta* gauss){
+		LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = L1L2l3[i];
+		LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+2] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+3] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = L1L2l3[i];
+		LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+2] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+3] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+0] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+1] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+2] = L1L2l3[i];
+		LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+3] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+0] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+1] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+2] = L1L2l3[i];
+		LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+3] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*4+num_dof*i+0] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*4+num_dof*i+1] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*4+num_dof*i+2] = dbasis[2][i];
+		LprimeFS[num_dof*NUMNODESP1_2d*4+num_dof*i+3] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*5+num_dof*i+0] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*5+num_dof*i+1] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*5+num_dof*i+2] = dbasis[2][i];
+		LprimeFS[num_dof*NUMNODESP1_2d*5+num_dof*i+3] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*6+num_dof*i+0] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*6+num_dof*i+1] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*6+num_dof*i+2] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*6+num_dof*i+3] = L1L2l3[i];
+		LprimeFS[num_dof*NUMNODESP1_2d*7+num_dof*i+0] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*7+num_dof*i+1] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*7+num_dof*i+2] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*7+num_dof*i+3] = L1L2l3[i];
+	}
+}
+/*}}}*/
+/*FUNCTION PentaRef::GetLFSMacAyeal {{{*/
+void PentaRef::GetLFSMacAyeal(IssmDouble* LFS, GaussPenta* gauss){
 	/* Compute L  matrix. L=[L1 L2 L3] where Li is square and of size numdof. 
 	 * For node i, Li can be expressed in the actual coordinate system
@@ -908,34 +908,34 @@
 
 	int num_dof=4;
-	IssmDouble l1l2l3[NUMNODESP1_2d];
-
-	/*Get l1l2l3 in actual coordinate system: */
-	l1l2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
-	l1l2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
-	l1l2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
-
-	/*Build LStokes: */
+	IssmDouble L1L2l3[NUMNODESP1_2d];
+
+	/*Get L1L2l3 in actual coordinate system: */
+	L1L2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
+	L1L2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
+	L1L2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
+
+	/*Build LFS: */
 	for(int i=0;i<3;i++){
-		LStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = l1l2l3[i];
-		LStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.;
-		LStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+2] = 0.;
-		LStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+3] = 0.;
-		LStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.;
-		LStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = l1l2l3[i];
-		LStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+2] = 0.;
-		LStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+3] = 0.;
-		LStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+0] = 0.;
-		LStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+1] = 0.;
-		LStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+2] = l1l2l3[i];
-		LStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+3] = 0.;
-		LStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+0] = 0.;
-		LStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+1] = 0.;
-		LStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+2] = l1l2l3[i];
-		LStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+3] = 0.;
-	}
-}
-/*}}}*/
-/*FUNCTION PentaRef::GetLprimeStokesMacAyeal {{{*/
-void PentaRef::GetLprimeStokesMacAyeal(IssmDouble* LprimeStokes, IssmDouble* xyz_list, GaussPenta* gauss){
+		LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = L1L2l3[i];
+		LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.;
+		LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+2] = 0.;
+		LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+3] = 0.;
+		LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.;
+		LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = L1L2l3[i];
+		LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+2] = 0.;
+		LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+3] = 0.;
+		LFS[num_dof*NUMNODESP1_2d*2+num_dof*i+0] = 0.;
+		LFS[num_dof*NUMNODESP1_2d*2+num_dof*i+1] = 0.;
+		LFS[num_dof*NUMNODESP1_2d*2+num_dof*i+2] = L1L2l3[i];
+		LFS[num_dof*NUMNODESP1_2d*2+num_dof*i+3] = 0.;
+		LFS[num_dof*NUMNODESP1_2d*3+num_dof*i+0] = 0.;
+		LFS[num_dof*NUMNODESP1_2d*3+num_dof*i+1] = 0.;
+		LFS[num_dof*NUMNODESP1_2d*3+num_dof*i+2] = L1L2l3[i];
+		LFS[num_dof*NUMNODESP1_2d*3+num_dof*i+3] = 0.;
+	}
+}
+/*}}}*/
+/*FUNCTION PentaRef::GetLprimeFSMacAyeal {{{*/
+void PentaRef::GetLprimeFSMacAyeal(IssmDouble* LprimeFS, IssmDouble* xyz_list, GaussPenta* gauss){
 	/* Compute Lprime  matrix. Lprime=[Lp1 Lp2 Lp3] where Lpi is square and of size numdof. 
 	 * For node i, Lpi can be expressed in the actual coordinate system
@@ -948,23 +948,23 @@
 	 */
 	int num_dof=2;
-	IssmDouble l1l2l3[NUMNODESP1_2d];
+	IssmDouble L1L2l3[NUMNODESP1_2d];
 	IssmDouble dbasis[3][NUMNODESP1];
 
-	/*Get l1l2l3 in actual coordinate system: */
-	l1l2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
-	l1l2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
-	l1l2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
+	/*Get L1L2l3 in actual coordinate system: */
+	L1L2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
+	L1L2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
+	L1L2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
 	GetNodalFunctionsP1Derivatives(&dbasis[0][0],xyz_list,gauss);
 
-	/*Build LprimeStokes: */
+	/*Build LprimeFS: */
 	for(int i=0;i<3;i++){
-		LprimeStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = l1l2l3[i];
-		LprimeStokes[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = l1l2l3[i];
-		LprimeStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+0] = l1l2l3[i];
-		LprimeStokes[num_dof*NUMNODESP1_2d*2+num_dof*i+1] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+0] = 0.;
-		LprimeStokes[num_dof*NUMNODESP1_2d*3+num_dof*i+1] = l1l2l3[i];
+		LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = L1L2l3[i];
+		LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = L1L2l3[i];
+		LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+0] = L1L2l3[i];
+		LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+1] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+0] = 0.;
+		LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+1] = L1L2l3[i];
 	}
 }
Index: issm/trunk-jpl/src/c/classes/Elements/PentaRef.h
===================================================================
--- issm/trunk-jpl/src/c/classes/Elements/PentaRef.h	(revision 15563)
+++ issm/trunk-jpl/src/c/classes/Elements/PentaRef.h	(revision 15564)
@@ -38,13 +38,13 @@
 		void GetSegmentJacobianDeterminant(IssmDouble*  Jdet, IssmDouble* xyz_list,GaussPenta* gauss);
 		void GetJacobianInvert(IssmDouble*  Jinv, IssmDouble* xyz_list,GaussPenta* gauss);
-		void GetBMacAyealPattyn(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
-		void GetBMacAyealStokes(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
-		void GetBPattyn(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
-		void GetBStokes(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
-		void GetBStokesGLS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
-		void GetBprimeMacAyealStokes(IssmDouble* Bprime, IssmDouble* xyz_list, GaussPenta* gauss);
-		void GetBprimePattyn(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
-		void GetBprimeStokes(IssmDouble* B_prime, IssmDouble* xyz_list, GaussPenta* gauss);
-		void GetBprimeStokesGLS(IssmDouble* B_prime, IssmDouble* xyz_list, GaussPenta* gauss);
+		void GetBMacAyealHO(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
+		void GetBMacAyealFS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
+		void GetBHO(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
+		void GetBFS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
+		void GetBFSGLS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
+		void GetBprimeMacAyealFS(IssmDouble* Bprime, IssmDouble* xyz_list, GaussPenta* gauss);
+		void GetBprimeHO(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
+		void GetBprimeFS(IssmDouble* B_prime, IssmDouble* xyz_list, GaussPenta* gauss);
+		void GetBprimeFSGLS(IssmDouble* B_prime, IssmDouble* xyz_list, GaussPenta* gauss);
 		void GetBprimeVert(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
 		void GetBAdvec(IssmDouble* B_advec, IssmDouble* xyz_list, GaussPenta* gauss);
@@ -52,11 +52,11 @@
 		void GetBVert(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);
 		void GetBprimeAdvec(IssmDouble* Bprime_advec, IssmDouble* xyz_list, GaussPenta* gauss);
-		void GetBPattynFriction(IssmDouble* L, GaussPenta* gauss);
-		void GetLStokes(IssmDouble* LStokes, GaussPenta* gauss);
-		void GetLprimeStokes(IssmDouble* LprimeStokes, IssmDouble* xyz_list, GaussPenta* gauss);
-		void GetLMacAyealStokes(IssmDouble* LMacAyealStokes, GaussPenta* gauss);
-		void GetLprimeMacAyealStokes(IssmDouble* LprimeMacAyealStokes, IssmDouble* xyz_list, GaussPenta* gauss);
-		void GetLStokesMacAyeal(IssmDouble* LStokesMacAyeal, GaussPenta* gauss);
-		void GetLprimeStokesMacAyeal(IssmDouble* LprimeStokesMacAyeal, IssmDouble* xyz_list, GaussPenta* gauss);
+		void GetBHOFriction(IssmDouble* L, GaussPenta* gauss);
+		void GetLFS(IssmDouble* LFS, GaussPenta* gauss);
+		void GetLprimeFS(IssmDouble* LprimeFS, IssmDouble* xyz_list, GaussPenta* gauss);
+		void GetLMacAyealFS(IssmDouble* LMacAyealFS, GaussPenta* gauss);
+		void GetLprimeMacAyealFS(IssmDouble* LprimeMacAyealFS, IssmDouble* xyz_list, GaussPenta* gauss);
+		void GetLFSMacAyeal(IssmDouble* LFSMacAyeal, GaussPenta* gauss);
+		void GetLprimeFSMacAyeal(IssmDouble* LprimeFSMacAyeal, IssmDouble* xyz_list, GaussPenta* gauss);
 		void GetInputValue(IssmDouble* pvalue,IssmDouble* plist, GaussPenta* gauss);
 		void GetInputValue(IssmDouble* pvalue,IssmDouble* plist,GaussTria* gauss){_error_("only PentaGauss are supported");};
Index: issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15564)
@@ -193,6 +193,6 @@
 			Ke=CreateKMatrixDiagnosticMacAyeal();
 			break;
-		case DiagnosticHutterAnalysisEnum:
-			Ke=CreateKMatrixDiagnosticHutter();
+		case DiagnosticSIAAnalysisEnum:
+			Ke=CreateKMatrixDiagnosticSIA();
 			break;
 		 #endif
@@ -306,6 +306,6 @@
 			pe=CreatePVectorDiagnosticMacAyeal();
 			break;
-		case DiagnosticHutterAnalysisEnum:
-			pe=CreatePVectorDiagnosticHutter();
+		case DiagnosticSIAAnalysisEnum:
+			pe=CreatePVectorDiagnosticSIA();
 			break;
 		#endif
@@ -423,5 +423,5 @@
 #ifdef _HAVE_DIAGNOSTIC_
 		case DiagnosticHorizAnalysisEnum:
-			Ke=CreateJacobianDiagnosticMacayeal();
+			Ke=CreateJacobianDiagnosticSSA();
 			break;
 #endif
@@ -1201,6 +1201,6 @@
 		GetSolutionFromInputsDiagnosticHoriz(solution);
 		break;
-	case DiagnosticHutterAnalysisEnum:
-		GetSolutionFromInputsDiagnosticHutter(solution);
+	case DiagnosticSIAAnalysisEnum:
+		GetSolutionFromInputsDiagnosticSIA(solution);
 		break;
 	#endif
@@ -1522,5 +1522,5 @@
 			InputUpdateFromSolutionDiagnosticHoriz(solution);
 			break;
-		case DiagnosticHutterAnalysisEnum:
+		case DiagnosticSIAAnalysisEnum:
 			InputUpdateFromSolutionDiagnosticHoriz(solution);
 			break;
@@ -2343,5 +2343,5 @@
 	iomodel->Constant(&progstabilization,PrognosticStabilizationEnum);
 	iomodel->Constant(&balancestabilization,BalancethicknessStabilizationEnum);
-	iomodel->Constant(&fe_ssa,FlowequationFeSsaEnum);
+	iomodel->Constant(&fe_ssa,FlowequationFeSSAEnum);
 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
 
@@ -3055,6 +3055,6 @@
 }
 /*}}}*/
-/*FUNCTION Tria::CreateKMatrixDiagnosticHutter{{{*/
-ElementMatrix* Tria::CreateKMatrixDiagnosticHutter(void){
+/*FUNCTION Tria::CreateKMatrixDiagnosticSIA{{{*/
+ElementMatrix* Tria::CreateKMatrixDiagnosticSIA(void){
 
 	/*Intermediaries*/
@@ -3224,6 +3224,6 @@
 }
 /*}}}*/
-/*FUNCTION Tria::CreatePVectorDiagnosticHutter{{{*/
-ElementVector* Tria::CreatePVectorDiagnosticHutter(void){
+/*FUNCTION Tria::CreatePVectorDiagnosticSIA{{{*/
+ElementVector* Tria::CreatePVectorDiagnosticSIA(void){
 
 	/*Intermediaries */
@@ -3274,6 +3274,6 @@
 }
 /*}}}*/
-/*FUNCTION Tria::CreateJacobianDiagnosticMacayeal{{{*/
-ElementMatrix* Tria::CreateJacobianDiagnosticMacayeal(void){
+/*FUNCTION Tria::CreateJacobianDiagnosticSSA{{{*/
+ElementMatrix* Tria::CreateJacobianDiagnosticSSA(void){
 
 	/*Intermediaries */
@@ -3382,6 +3382,6 @@
 }
 /*}}}*/
-/*FUNCTION Tria::GetSolutionFromInputsDiagnosticHutter{{{*/
-void  Tria::GetSolutionFromInputsDiagnosticHutter(Vector<IssmDouble>* solution){
+/*FUNCTION Tria::GetSolutionFromInputsDiagnosticSIA{{{*/
+void  Tria::GetSolutionFromInputsDiagnosticSIA(Vector<IssmDouble>* solution){
 
 	const int    numdof=NDOF2*NUMVERTICES;
@@ -3494,6 +3494,6 @@
 }
 /*}}}*/
-/*FUNCTION Tria::InputUpdateFromSolutionDiagnosticHutter {{{*/
-void  Tria::InputUpdateFromSolutionDiagnosticHutter(IssmDouble* solution){
+/*FUNCTION Tria::InputUpdateFromSolutionDiagnosticSIA {{{*/
+void  Tria::InputUpdateFromSolutionDiagnosticSIA(IssmDouble* solution){
 
 	int        i;
@@ -5137,6 +5137,6 @@
 }
 /*}}}*/
-/*FUNCTION Tria::CreatePVectorAdjointStokes{{{*/
-ElementVector* Tria::CreatePVectorAdjointStokes(void){
+/*FUNCTION Tria::CreatePVectorAdjointFS{{{*/
+ElementVector* Tria::CreatePVectorAdjointFS(void){
 
 	/*Intermediaries */
@@ -5156,5 +5156,5 @@
 
 	/*Initialize Element vector*/
-	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
+	ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum);
 
 	/*Retrieve all inputs and parameters*/
Index: issm/trunk-jpl/src/c/classes/Elements/Tria.h
===================================================================
--- issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15563)
+++ issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 15564)
@@ -147,5 +147,5 @@
 		void   GradjZMacAyeal(Vector<IssmDouble>* gradient,int control_index);
 		void   GradjDragMacAyeal(Vector<IssmDouble>* gradient,int control_index);
-		void   GradjDragStokes(Vector<IssmDouble>* gradient,int control_index);
+		void   GradjDragFS(Vector<IssmDouble>* gradient,int control_index);
 		void   GradjDragGradient(Vector<IssmDouble>* gradient,int weight_index,int control_index);
 		void   GradjDhDtBalancedthickness(Vector<IssmDouble>* gradient,int control_index);
@@ -223,14 +223,14 @@
 		ElementMatrix* CreateKMatrixDiagnosticMacAyealViscous(void);
 		ElementMatrix* CreateKMatrixDiagnosticMacAyealFriction(void);
-		ElementMatrix* CreateKMatrixDiagnosticHutter(void);
+		ElementMatrix* CreateKMatrixDiagnosticSIA(void);
 		ElementVector* CreatePVectorDiagnosticMacAyeal(void);
 		ElementVector* CreatePVectorDiagnosticMacAyealDrivingStress(void);
 		ElementVector* CreatePVectorDiagnosticMacAyealFront(void);
-		ElementVector* CreatePVectorDiagnosticHutter(void);
-		ElementMatrix* CreateJacobianDiagnosticMacayeal(void);
+		ElementVector* CreatePVectorDiagnosticSIA(void);
+		ElementMatrix* CreateJacobianDiagnosticSSA(void);
 		void	  GetSolutionFromInputsDiagnosticHoriz(Vector<IssmDouble>* solution);
-		void	  GetSolutionFromInputsDiagnosticHutter(Vector<IssmDouble>* solution);
+		void	  GetSolutionFromInputsDiagnosticSIA(Vector<IssmDouble>* solution);
 		void	  InputUpdateFromSolutionDiagnosticHoriz( IssmDouble* solution);
-		void	  InputUpdateFromSolutionDiagnosticHutter( IssmDouble* solution);
+		void	  InputUpdateFromSolutionDiagnosticSIA( IssmDouble* solution);
 		#endif
 
@@ -239,5 +239,5 @@
 		ElementMatrix* CreateKMatrixAdjointMacAyeal(void);
 		ElementVector* CreatePVectorAdjointHoriz(void);
-		ElementVector* CreatePVectorAdjointStokes(void);
+		ElementVector* CreatePVectorAdjointFS(void);
 		ElementVector* CreatePVectorAdjointBalancethickness(void);
 		void	  InputUpdateFromSolutionAdjointBalancethickness( IssmDouble* solution);
Index: issm/trunk-jpl/src/c/classes/Elements/TriaRef.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/classes/Elements/TriaRef.cpp	(revision 15564)
@@ -114,6 +114,6 @@
 }
 /*}}}*/
-/*FUNCTION TriaRef::GetBMacAyealStokes {{{*/
-void TriaRef::GetBMacAyealStokes(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss){
+/*FUNCTION TriaRef::GetBMacAyealFS {{{*/
+void TriaRef::GetBMacAyealFS(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss){
 
 	/*Compute B  matrix. B=[B1 B2 B3] where Bi is of size 3*NDOF2. 
@@ -265,6 +265,6 @@
 }
 /*}}}*/
-/*FUNCTION TriaRef::GetBprimeMacAyealStokes {{{*/
-void TriaRef::GetBprimeMacAyealStokes(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss){
+/*FUNCTION TriaRef::GetBprimeMacAyealFS {{{*/
+void TriaRef::GetBprimeMacAyealFS(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss){
 	/*Compute Bprime  matrix. Bprime=[Bprime1 Bprime2 Bprime3] where Bprimei is of size 3*NDOF2. 
 	 * For node i, Bprimei can be expressed in the actual coordinate system
Index: issm/trunk-jpl/src/c/classes/Elements/TriaRef.h
===================================================================
--- issm/trunk-jpl/src/c/classes/Elements/TriaRef.h	(revision 15563)
+++ issm/trunk-jpl/src/c/classes/Elements/TriaRef.h	(revision 15564)
@@ -24,7 +24,7 @@
 		/*Numerics*/
 		void GetBMacAyeal(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss);
-		void GetBMacAyealStokes(IssmDouble* B , IssmDouble* xyz_list, GaussTria* gauss);
+		void GetBMacAyealFS(IssmDouble* B , IssmDouble* xyz_list, GaussTria* gauss);
 		void GetBprimeMacAyeal(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss);
-		void GetBprimeMacAyealStokes(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss);
+		void GetBprimeMacAyealFS(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss);
 		void GetBprimePrognostic(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss);
 		void GetBPrognostic(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss);
Index: issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h
===================================================================
--- issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 15563)
+++ issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 15564)
@@ -62,6 +62,6 @@
 		void GetVyStrainRate3d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
 		void GetVzStrainRate3d(IssmDouble* epsilonvz,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVxStrainRate3dPattyn(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVyStrainRate3dPattyn(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVxStrainRate3dHO(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVyStrainRate3dHO(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
 		void ChangeEnum(int newenumtype);
 		void SquareMin(IssmDouble* psquaremin, Parameters* parameters);
Index: issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h
===================================================================
--- issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 15563)
+++ issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 15564)
@@ -67,6 +67,6 @@
 		void GetVyStrainRate3d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
 		void GetVzStrainRate3d(IssmDouble* epsilonvz,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVxStrainRate3dPattyn(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVyStrainRate3dPattyn(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVxStrainRate3dHO(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVyStrainRate3dHO(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
 		void ChangeEnum(int newenumtype){_error_("not implemented yet");};
 		void SquareMin(IssmDouble* psquaremin,Parameters* parameters){_error_("not implemented yet");};
Index: issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h
===================================================================
--- issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 15563)
+++ issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 15564)
@@ -61,6 +61,6 @@
 		void GetVyStrainRate3d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
 		void GetVzStrainRate3d(IssmDouble* epsilonvz,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVxStrainRate3dPattyn(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVyStrainRate3dPattyn(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVxStrainRate3dHO(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVyStrainRate3dHO(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
 		void ChangeEnum(int newenumtype){_error_("not implemented yet");};
 		void SquareMin(IssmDouble* psquaremin,Parameters* parameters){_error_("not implemented yet");};
Index: issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp	(revision 15564)
@@ -156,12 +156,12 @@
 }
 /*}}}*/
-/*FUNCTION DoubleInput::GetVxStrainRate3dPattyn(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){{{*/
-void DoubleInput::GetVxStrainRate3dPattyn(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){
+/*FUNCTION DoubleInput::GetVxStrainRate3dHO(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){{{*/
+void DoubleInput::GetVxStrainRate3dHO(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){
 	/*Epsilon is zero as vx is constant over the element*/
 	for(int i=0;i<5;i++) epsilonvx[i]=0;
 }
 /*}}}*/
-/*FUNCTION DoubleInput::GetVyStrainRate3dPattyn(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){{{*/
-void DoubleInput::GetVyStrainRate3dPattyn(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){
+/*FUNCTION DoubleInput::GetVyStrainRate3dHO(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){{{*/
+void DoubleInput::GetVyStrainRate3dHO(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){
 	/*Epsilon is zero as vy is constant over the element*/
 	for(int i=0;i<5;i++) epsilonvy[i]=0;
Index: issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h
===================================================================
--- issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 15563)
+++ issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 15564)
@@ -61,6 +61,6 @@
 		void GetVyStrainRate3d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss);
 		void GetVzStrainRate3d(IssmDouble* epsilonvz,IssmDouble* xyz_list, GaussPenta* gauss);
-		void GetVxStrainRate3dPattyn(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss);
-		void GetVyStrainRate3dPattyn(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss);
+		void GetVxStrainRate3dHO(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss);
+		void GetVyStrainRate3dHO(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss);
 		void ChangeEnum(int newenumtype);
 		void SquareMin(IssmDouble* psquaremin,Parameters* parameters);
Index: issm/trunk-jpl/src/c/classes/Inputs/Input.h
===================================================================
--- issm/trunk-jpl/src/c/classes/Inputs/Input.h	(revision 15563)
+++ issm/trunk-jpl/src/c/classes/Inputs/Input.h	(revision 15564)
@@ -44,6 +44,6 @@
 		virtual void GetVyStrainRate3d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss)=0;
 		virtual void GetVzStrainRate3d(IssmDouble* epsilonvz,IssmDouble* xyz_list, GaussPenta* gauss)=0;
-		virtual void GetVxStrainRate3dPattyn(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss)=0;
-		virtual void GetVyStrainRate3dPattyn(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss)=0;
+		virtual void GetVxStrainRate3dHO(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss)=0;
+		virtual void GetVyStrainRate3dHO(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss)=0;
 		virtual void ChangeEnum(int newenumtype)=0;
 		virtual void Configure(Parameters* parameters)=0;
Index: issm/trunk-jpl/src/c/classes/Inputs/IntInput.h
===================================================================
--- issm/trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 15563)
+++ issm/trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 15564)
@@ -63,6 +63,6 @@
 		void GetVyStrainRate3d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
 		void GetVzStrainRate3d(IssmDouble* epsilonvz,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVxStrainRate3dPattyn(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVyStrainRate3dPattyn(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVxStrainRate3dHO(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVyStrainRate3dHO(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
 		void ChangeEnum(int newenumtype);
 		void SquareMin(IssmDouble* psquaremin,Parameters* parameters);
Index: issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 15564)
@@ -145,5 +145,5 @@
 
 	/*Get B matrix: */
-	GetBStokes(&B[0][0], xyz_list, gauss);
+	GetBFS(&B[0][0], xyz_list, gauss);
 
 	/*Create a reduced matrix of B to get rid of pressure */
@@ -193,5 +193,5 @@
 
 	/*Get B matrix: */
-	GetBStokes(&B[0][0], xyz_list, gauss);
+	GetBFS(&B[0][0], xyz_list, gauss);
 	/*Create a reduced matrix of B to get rid of pressure */
 	for (i=0;i<6;i++){
@@ -238,5 +238,5 @@
 
 	/*Get B matrix: */
-	GetBStokes(&B[0][0], xyz_list, gauss);
+	GetBFS(&B[0][0], xyz_list, gauss);
 
 	_assert_(this->NumberofNodes()==6); //Check Tria too
@@ -276,6 +276,6 @@
 }
 /*}}}*/
-/*FUNCTION PentaInput::GetVxStrainRate3dPattyn{{{*/
-void PentaInput::GetVxStrainRate3dPattyn(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){
+/*FUNCTION PentaInput::GetVxStrainRate3dHO{{{*/
+void PentaInput::GetVxStrainRate3dHO(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){
 
 	int i;
@@ -285,5 +285,5 @@
 
 	/*Get B matrix: */
-	GetBPattyn(&B[0][0], xyz_list, gauss);
+	GetBHO(&B[0][0], xyz_list, gauss);
 
 	_assert_(this->NumberofNodes()==6); //Check Tria too
@@ -303,6 +303,6 @@
 }
 /*}}}*/
-/*FUNCTION PentaInput::GetVyStrainRate3dPattyn{{{*/
-void PentaInput::GetVyStrainRate3dPattyn(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){
+/*FUNCTION PentaInput::GetVyStrainRate3dHO{{{*/
+void PentaInput::GetVyStrainRate3dHO(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){
 
 	int i;
@@ -312,5 +312,5 @@
 
 	/*Get B matrix: */
-	GetBPattyn(&B[0][0], xyz_list, gauss);
+	GetBHO(&B[0][0], xyz_list, gauss);
 
 	_assert_(this->NumberofNodes()==6); //Check Tria too
Index: issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h
===================================================================
--- issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 15563)
+++ issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 15564)
@@ -62,6 +62,6 @@
 		void GetVyStrainRate3d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss);
 		void GetVzStrainRate3d(IssmDouble* epsilonvz,IssmDouble* xyz_list, GaussPenta* gauss);
-		void GetVxStrainRate3dPattyn(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss);
-		void GetVyStrainRate3dPattyn(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss);
+		void GetVxStrainRate3dHO(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss);
+		void GetVyStrainRate3dHO(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss);
 		void ChangeEnum(int newenumtype);
 
Index: issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h
===================================================================
--- issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 15563)
+++ issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 15564)
@@ -65,6 +65,6 @@
 		void GetVyStrainRate3d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
 		void GetVzStrainRate3d(IssmDouble* epsilonvz,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVxStrainRate3dPattyn(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVyStrainRate3dPattyn(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVxStrainRate3dHO(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVyStrainRate3dHO(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
 		void ChangeEnum(int newenumtype);
 
Index: issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h
===================================================================
--- issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 15563)
+++ issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 15564)
@@ -62,6 +62,6 @@
 		void GetVyStrainRate3d(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
 		void GetVzStrainRate3d(IssmDouble* epsilonvz,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVxStrainRate3dPattyn(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
-		void GetVyStrainRate3dPattyn(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVxStrainRate3dHO(IssmDouble* epsilonvx,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
+		void GetVyStrainRate3dHO(IssmDouble* epsilonvy,IssmDouble* xyz_list, GaussPenta* gauss){_error_("not implemented yet");};
 		void ChangeEnum(int newenumtype);
 
Index: issm/trunk-jpl/src/c/classes/Loads/Icefront.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/Loads/Icefront.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/classes/Loads/Icefront.cpp	(revision 15564)
@@ -75,5 +75,5 @@
 		icefront_vertex_ids[1]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+1));
 	}
-	else if (in_icefront_type==PattynIceFrontEnum || in_icefront_type==StokesIceFrontEnum){
+	else if (in_icefront_type==HOIceFrontEnum || in_icefront_type==FSIceFrontEnum){
 		numnodes    = 4;
 		numvertices = 4;
@@ -158,5 +158,5 @@
 //		icefront_vertex_ids[1]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+1));
 	}
-	else if (in_icefront_type==PattynIceFrontEnum || in_icefront_type==StokesIceFrontEnum){
+	else if (in_icefront_type==HOIceFrontEnum || in_icefront_type==FSIceFrontEnum){
 //		icefront_node_ids[0]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+0));
 //		icefront_node_ids[1]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+1));
@@ -170,5 +170,5 @@
 	else _error_("in_icefront_type " << EnumToStringx(in_icefront_type) << " not supported yet!");
 
-	if (in_icefront_type==PattynIceFrontEnum || in_icefront_type==StokesIceFrontEnum){
+	if (in_icefront_type==HOIceFrontEnum || in_icefront_type==FSIceFrontEnum){
 		numnodes=4;
 		numvertices=4;
@@ -380,6 +380,6 @@
 			return;
 #ifdef _HAVE_3D_
-		case PattynIceFrontEnum:
-		case StokesIceFrontEnum:
+		case HOIceFrontEnum:
+		case FSIceFrontEnum:
 			for(int i=0;i<NUMVERTICESQUA;i++) sidlist[i]=nodes[i]->Sid();
 			return;
@@ -402,7 +402,7 @@
 		case MacAyeal3dIceFrontEnum:
 			return NUMVERTICESSEG;
-		case PattynIceFrontEnum:
+		case HOIceFrontEnum:
 			return NUMVERTICESQUA;
-		case StokesIceFrontEnum:
+		case FSIceFrontEnum:
 			return NUMVERTICESQUA;
 #endif
@@ -564,8 +564,8 @@
 		case MacAyeal3dIceFrontEnum:
 			return CreatePVectorDiagnosticMacAyeal3d();
-		case PattynIceFrontEnum:
-			return CreatePVectorDiagnosticPattyn();
-		case StokesIceFrontEnum:
-			return CreatePVectorDiagnosticStokes();
+		case HOIceFrontEnum:
+			return CreatePVectorDiagnosticHO();
+		case FSIceFrontEnum:
+			return CreatePVectorDiagnosticFS();
 	    #endif
 		default:
@@ -696,6 +696,6 @@
 }
 /*}}}*/
-/*FUNCTION Icefront::CreatePVectorDiagnosticPattyn{{{*/
-ElementVector* Icefront::CreatePVectorDiagnosticPattyn(void){
+/*FUNCTION Icefront::CreatePVectorDiagnosticHO{{{*/
+ElementVector* Icefront::CreatePVectorDiagnosticHO(void){
 
 	/*Constants*/
@@ -717,5 +717,5 @@
 	/*Initialize Element vector and return if necessary*/
 	if(penta->IsOnWater()) return NULL;
-	ElementVector* pe=new ElementVector(nodes,NUMVERTICESQUA,this->parameters,PattynApproximationEnum);
+	ElementVector* pe=new ElementVector(nodes,NUMVERTICESQUA,this->parameters,HOApproximationEnum);
 
 	/*Retrieve all inputs and parameters*/
@@ -773,6 +773,6 @@
 }
 /*}}}*/
-/*FUNCTION Icefront::CreatePVectorDiagnosticStokes{{{*/
-ElementVector* Icefront::CreatePVectorDiagnosticStokes(void){
+/*FUNCTION Icefront::CreatePVectorDiagnosticFS{{{*/
+ElementVector* Icefront::CreatePVectorDiagnosticFS(void){
 
 	/*Constants*/
@@ -794,5 +794,5 @@
 	/*Initialize Element vector and return if necessary*/
 	if(penta->IsOnWater()) return NULL;
-	ElementVector* pe=new ElementVector(nodes,NUMVERTICESQUA,this->parameters,StokesApproximationEnum);
+	ElementVector* pe=new ElementVector(nodes,NUMVERTICESQUA,this->parameters,FSApproximationEnum);
 
 	/*Retrieve all inputs and parameters*/
@@ -833,5 +833,5 @@
 		}
 		air_pressure=0;
-		pressure = water_pressure + air_pressure; //no ice pressure fore Stokes
+		pressure = water_pressure + air_pressure; //no ice pressure fore FS
 
 		for(i=0;i<NUMVERTICESQUA;i++){
Index: issm/trunk-jpl/src/c/classes/Loads/Icefront.h
===================================================================
--- issm/trunk-jpl/src/c/classes/Loads/Icefront.h	(revision 15563)
+++ issm/trunk-jpl/src/c/classes/Loads/Icefront.h	(revision 15564)
@@ -97,6 +97,6 @@
         #ifdef _HAVE_3D_
 		ElementVector* CreatePVectorDiagnosticMacAyeal3d(void);
-		ElementVector* CreatePVectorDiagnosticPattyn(void);
-		ElementVector* CreatePVectorDiagnosticStokes(void);
+		ElementVector* CreatePVectorDiagnosticHO(void);
+		ElementVector* CreatePVectorDiagnosticFS(void);
 	    #endif
 		/*}}}*/
Index: issm/trunk-jpl/src/c/classes/Loads/Pengrid.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 15564)
@@ -223,5 +223,5 @@
 		#ifdef _HAVE_DIAGNOSTIC_
 		case DiagnosticHorizAnalysisEnum: case AdjointHorizAnalysisEnum:
-			Ke=PenaltyCreateKMatrixDiagnosticStokes(kmax);
+			Ke=PenaltyCreateKMatrixDiagnosticFS(kmax);
 			break;
 		#endif
@@ -449,6 +449,6 @@
 /*}}}*/
 #ifdef _HAVE_DIAGNOSTIC_
-/*FUNCTION Pengrid::PenaltyCreateKMatrixDiagnosticStokes {{{*/
-ElementMatrix* Pengrid::PenaltyCreateKMatrixDiagnosticStokes(IssmDouble kmax){
+/*FUNCTION Pengrid::PenaltyCreateKMatrixDiagnosticFS {{{*/
+ElementMatrix* Pengrid::PenaltyCreateKMatrixDiagnosticFS(IssmDouble kmax){
 
 	const int numdof = NUMVERTICES *NDOF4;
@@ -461,6 +461,6 @@
 	/*Initialize Element vector and return if necessary*/
 	penta->inputs->GetInputValue(&approximation,ApproximationEnum);
-	if(approximation!=StokesApproximationEnum &&  approximation!=PattynStokesApproximationEnum) return NULL;
-	ElementMatrix* Ke=new ElementMatrix(&node,1,this->parameters,StokesApproximationEnum);
+	if(approximation!=FSApproximationEnum &&  approximation!=HOFSApproximationEnum) return NULL;
+	ElementMatrix* Ke=new ElementMatrix(&node,1,this->parameters,FSApproximationEnum);
 
 	/*Retrieve all inputs and parameters*/
Index: issm/trunk-jpl/src/c/classes/Loads/Pengrid.h
===================================================================
--- issm/trunk-jpl/src/c/classes/Loads/Pengrid.h	(revision 15563)
+++ issm/trunk-jpl/src/c/classes/Loads/Pengrid.h	(revision 15564)
@@ -88,5 +88,5 @@
 		/*Pengrid management {{{*/
 		#ifdef _HAVE_DIAGNOSTIC_
-		ElementMatrix* PenaltyCreateKMatrixDiagnosticStokes(IssmDouble kmax);
+		ElementMatrix* PenaltyCreateKMatrixDiagnosticFS(IssmDouble kmax);
 		#endif
 		#ifdef _HAVE_THERMAL_
Index: issm/trunk-jpl/src/c/classes/Loads/Penpair.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/Loads/Penpair.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/classes/Loads/Penpair.cpp	(revision 15564)
@@ -301,24 +301,24 @@
 		case MacAyealApproximationEnum:
 			switch(approximation1){
-				case MacAyealApproximationEnum: return PenaltyCreateKMatrixDiagnosticMacAyealPattyn(kmax); 
-				case PattynApproximationEnum:   return PenaltyCreateKMatrixDiagnosticMacAyealPattyn(kmax); 
+				case MacAyealApproximationEnum: return PenaltyCreateKMatrixDiagnosticMacAyealHO(kmax); 
+				case HOApproximationEnum:   return PenaltyCreateKMatrixDiagnosticMacAyealHO(kmax); 
 				default: _error_("not supported yet");
 			}
-		case PattynApproximationEnum:
+		case HOApproximationEnum:
 			switch(approximation1){
-				case MacAyealApproximationEnum: return PenaltyCreateKMatrixDiagnosticMacAyealPattyn(kmax); 
-				case PattynApproximationEnum:   return PenaltyCreateKMatrixDiagnosticMacAyealPattyn(kmax); 
+				case MacAyealApproximationEnum: return PenaltyCreateKMatrixDiagnosticMacAyealHO(kmax); 
+				case HOApproximationEnum:   return PenaltyCreateKMatrixDiagnosticMacAyealHO(kmax); 
 				default: _error_("not supported yet");
 			}
-		case StokesApproximationEnum:
+		case FSApproximationEnum:
 			switch(approximation1){
-				case StokesApproximationEnum: return PenaltyCreateKMatrixDiagnosticStokes(kmax); 
-				case NoneApproximationEnum: return   PenaltyCreateKMatrixDiagnosticStokes(kmax); 
+				case FSApproximationEnum: return PenaltyCreateKMatrixDiagnosticFS(kmax); 
+				case NoneApproximationEnum: return   PenaltyCreateKMatrixDiagnosticFS(kmax); 
 				default: _error_("not supported yet");
 			}
 		case NoneApproximationEnum:
 			switch(approximation1){
-				case StokesApproximationEnum: return PenaltyCreateKMatrixDiagnosticStokes(kmax); 
-				case NoneApproximationEnum: return   PenaltyCreateKMatrixDiagnosticStokes(kmax); 
+				case FSApproximationEnum: return PenaltyCreateKMatrixDiagnosticFS(kmax); 
+				case NoneApproximationEnum: return   PenaltyCreateKMatrixDiagnosticFS(kmax); 
 				default: _error_("not supported yet");
 			}
@@ -327,6 +327,6 @@
 }
 /*}}}*/
-/*FUNCTION Penpair::PenaltyCreateKMatrixDiagnosticMacAyealPattyn {{{*/
-ElementMatrix* Penpair::PenaltyCreateKMatrixDiagnosticMacAyealPattyn(IssmDouble kmax){
+/*FUNCTION Penpair::PenaltyCreateKMatrixDiagnosticMacAyealHO {{{*/
+ElementMatrix* Penpair::PenaltyCreateKMatrixDiagnosticMacAyealHO(IssmDouble kmax){
 
 	const int numdof=NUMVERTICES*NDOF2;
@@ -354,6 +354,6 @@
 }
 /*}}}*/
-/*FUNCTION Penpair::PenaltyCreateKMatrixDiagnosticStokes {{{*/
-ElementMatrix* Penpair::PenaltyCreateKMatrixDiagnosticStokes(IssmDouble kmax){
+/*FUNCTION Penpair::PenaltyCreateKMatrixDiagnosticFS {{{*/
+ElementMatrix* Penpair::PenaltyCreateKMatrixDiagnosticFS(IssmDouble kmax){
 
 	const int numdof=NUMVERTICES*NDOF4;
Index: issm/trunk-jpl/src/c/classes/Loads/Penpair.h
===================================================================
--- issm/trunk-jpl/src/c/classes/Loads/Penpair.h	(revision 15563)
+++ issm/trunk-jpl/src/c/classes/Loads/Penpair.h	(revision 15564)
@@ -68,6 +68,6 @@
 			/*Penpair management: {{{*/
 		ElementMatrix* PenaltyCreateKMatrixDiagnosticHoriz(IssmDouble kmax);
-		ElementMatrix* PenaltyCreateKMatrixDiagnosticMacAyealPattyn(IssmDouble kmax);
-		ElementMatrix* PenaltyCreateKMatrixDiagnosticStokes(IssmDouble kmax);
+		ElementMatrix* PenaltyCreateKMatrixDiagnosticMacAyealHO(IssmDouble kmax);
+		ElementMatrix* PenaltyCreateKMatrixDiagnosticFS(IssmDouble kmax);
 		ElementMatrix* PenaltyCreateKMatrixPrognostic(IssmDouble kmax);
 		/*}}}*/
Index: issm/trunk-jpl/src/c/classes/Materials/Matdamageice.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/Materials/Matdamageice.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/classes/Materials/Matdamageice.cpp	(revision 15564)
@@ -351,6 +351,6 @@
 }
 /*}}}*/
-/*FUNCTION Matdamageice::GetViscosity3dStokes {{{*/
-void  Matdamageice::GetViscosity3dStokes(IssmDouble* pviscosity3d, IssmDouble* epsilon){
+/*FUNCTION Matdamageice::GetViscosity3dFS {{{*/
+void  Matdamageice::GetViscosity3dFS(IssmDouble* pviscosity3d, IssmDouble* epsilon){
 	/*Return viscosity accounting for steady state power law creep [Thomas and MacAyeal, 1982]: 
 	 *
Index: issm/trunk-jpl/src/c/classes/Materials/Matdamageice.h
===================================================================
--- issm/trunk-jpl/src/c/classes/Materials/Matdamageice.h	(revision 15563)
+++ issm/trunk-jpl/src/c/classes/Materials/Matdamageice.h	(revision 15564)
@@ -52,5 +52,5 @@
 		void   GetViscosity2d(IssmDouble* pviscosity, IssmDouble* pepsilon);
 		void   GetViscosity3d(IssmDouble* pviscosity3d, IssmDouble* pepsilon);
-		void   GetViscosity3dStokes(IssmDouble* pviscosity3d, IssmDouble* epsilon);
+		void   GetViscosity3dFS(IssmDouble* pviscosity3d, IssmDouble* epsilon);
 		void   GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon);
 		void   GetViscosityZComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon);
Index: issm/trunk-jpl/src/c/classes/Materials/Material.h
===================================================================
--- issm/trunk-jpl/src/c/classes/Materials/Material.h	(revision 15563)
+++ issm/trunk-jpl/src/c/classes/Materials/Material.h	(revision 15564)
@@ -28,5 +28,5 @@
 		virtual void       GetViscosity2d(IssmDouble* pviscosity, IssmDouble* pepsilon)=0;
 		virtual void       GetViscosity3d(IssmDouble* pviscosity3d, IssmDouble* pepsilon)=0;
-		virtual void       GetViscosity3dStokes(IssmDouble* pviscosity3d, IssmDouble* epsilon)=0;
+		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;
Index: issm/trunk-jpl/src/c/classes/Materials/Matice.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 15564)
@@ -342,6 +342,6 @@
 }
 /*}}}*/
-/*FUNCTION Matice::GetViscosity3dStokes {{{*/
-void  Matice::GetViscosity3dStokes(IssmDouble* pviscosity3d, IssmDouble* epsilon){
+/*FUNCTION Matice::GetViscosity3dFS {{{*/
+void  Matice::GetViscosity3dFS(IssmDouble* pviscosity3d, IssmDouble* epsilon){
 	/*Return viscosity accounting for steady state power law creep [Thomas and MacAyeal, 1982]: 
 	 *
Index: issm/trunk-jpl/src/c/classes/Materials/Matice.h
===================================================================
--- issm/trunk-jpl/src/c/classes/Materials/Matice.h	(revision 15563)
+++ issm/trunk-jpl/src/c/classes/Materials/Matice.h	(revision 15564)
@@ -59,5 +59,5 @@
 		void       GetViscosity2d(IssmDouble* pviscosity, IssmDouble* pepsilon);
 		void       GetViscosity3d(IssmDouble* pviscosity3d, IssmDouble* pepsilon);
-		void       GetViscosity3dStokes(IssmDouble* pviscosity3d, IssmDouble* epsilon);
+		void       GetViscosity3dFS(IssmDouble* pviscosity3d, IssmDouble* epsilon);
 		void       GetViscosityComplement(IssmDouble* pviscosity_complement, IssmDouble* pepsilon);
 		void GetViscosityZComplement(IssmDouble*, IssmDouble*){_error_("not supported");};
Index: issm/trunk-jpl/src/c/classes/Materials/Matpar.h
===================================================================
--- issm/trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 15563)
+++ issm/trunk-jpl/src/c/classes/Materials/Matpar.h	(revision 15564)
@@ -89,5 +89,5 @@
 		void       GetViscosity2d(IssmDouble* pviscosity, IssmDouble* pepsilon){_error_("not supported");};
 		void       GetViscosity3d(IssmDouble* pviscosity3d, IssmDouble* pepsilon){_error_("not supported");};
-		void       GetViscosity3dStokes(IssmDouble* pviscosity3d, IssmDouble* epsilon){_error_("not supported");};
+		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");};
Index: issm/trunk-jpl/src/c/classes/Node.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/Node.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/classes/Node.cpp	(revision 15564)
@@ -83,10 +83,10 @@
 				this->Deactivate();
 			}
-			if(node_type==MacAyealPattynApproximationEnum && reCast<int>(iomodel->Data(FlowequationBordermacayealEnum)[io_index])){
+			if(node_type==MacAyealHOApproximationEnum && reCast<int>(iomodel->Data(FlowequationBorderSSAEnum)[io_index])){
 				if(!reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){
 					this->Deactivate();
 				}
 			}
-			if(node_type==MacAyealStokesApproximationEnum && reCast<int>(iomodel->Data(FlowequationBordermacayealEnum)[io_index])){
+			if(node_type==MacAyealFSApproximationEnum && reCast<int>(iomodel->Data(FlowequationBorderSSAEnum)[io_index])){
 				if(!reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){
 					for(k=1;k<=2;k++) this->FreezeDof(k);
@@ -94,6 +94,6 @@
 			}
 		}
-		/*spc all nodes on hutter*/
-		if(node_type==HutterApproximationEnum){
+		/*spc all nodes on SIA*/
+		if(node_type==SIAApproximationEnum){
 			this->Deactivate();
 		}
@@ -101,9 +101,9 @@
 	#endif
 
-	/*Diagnostic Hutter*/
-	if(analysis_type==DiagnosticHutterAnalysisEnum){
+	/*Diagnostic SIA*/
+	if(analysis_type==DiagnosticSIAAnalysisEnum){
 		_assert_(iomodel->Data(FlowequationVertexEquationEnum));
-		/*Constrain all nodes that are not Hutter*/
-		if(reCast<int>(node_type)!=HutterApproximationEnum){
+		/*Constrain all nodes that are not SIA*/
+		if(reCast<int>(node_type)!=SIAApproximationEnum){
 			this->Deactivate();
 		}
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateDataSets.cpp	(revision 15564)
@@ -55,9 +55,9 @@
 			break;
 
-		case DiagnosticHutterAnalysisEnum:
-			CreateNodesDiagnosticHutter(pnodes, iomodel);
-			CreateConstraintsDiagnosticHutter(pconstraints,iomodel);
-			CreateLoadsDiagnosticHutter(ploads,iomodel);
-			UpdateElementsDiagnosticHutter(elements,iomodel,analysis_counter,analysis_type);
+		case DiagnosticSIAAnalysisEnum:
+			CreateNodesDiagnosticSIA(pnodes, iomodel);
+			CreateConstraintsDiagnosticSIA(pconstraints,iomodel);
+			CreateLoadsDiagnosticSIA(ploads,iomodel);
+			UpdateElementsDiagnosticSIA(elements,iomodel,analysis_counter,analysis_type);
 			break;
 		#endif
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 15564)
@@ -45,10 +45,10 @@
 	/*Copy some constants from iomodel */
 	parameters->AddObject(iomodel->CopyConstantObject(MeshDimensionEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIshutterEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsmacayealEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsl1l2Enum));
-	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIspattynEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsstokesEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(FlowequationFeStokesEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsSIAEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsSSAEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsL1L2Enum));
+	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsHOEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(FlowequationIsFSEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(FlowequationFeFSEnum));
 	parameters->AddObject(iomodel->CopyConstantObject(SettingsOutputFrequencyEnum));
 	parameters->AddObject(iomodel->CopyConstantObject(DiagnosticRestolEnum));
@@ -82,5 +82,5 @@
 	parameters->AddObject(iomodel->CopyConstantObject(ThermalPenaltyLockEnum));
 	parameters->AddObject(iomodel->CopyConstantObject(DiagnosticRiftPenaltyThresholdEnum));
-	parameters->AddObject(iomodel->CopyConstantObject(DiagnosticStokesreconditioningEnum));
+	parameters->AddObject(iomodel->CopyConstantObject(DiagnosticFSreconditioningEnum));
 	parameters->AddObject(iomodel->CopyConstantObject(DiagnosticShelfDampeningEnum));
 	parameters->AddObject(iomodel->CopyConstantObject(DiagnosticViscosityOvershootEnum));
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp	(revision 15564)
@@ -16,6 +16,6 @@
 	IssmDouble g;
 	IssmDouble rho_ice;
-	IssmDouble stokesreconditioning;
-	bool       ismacayeal,isl1l2,ispattyn,isstokes;
+	IssmDouble FSreconditioning;
+	bool       isSSA,isL1L2,isHO,isFS;
 	int        fe_ssa;
 	bool       spcpresent = false;
@@ -26,7 +26,7 @@
 	IssmDouble *spcvy          = NULL;
 	IssmDouble *spcvz          = NULL;
-	IssmDouble *nodeonmacayeal = NULL;
-	IssmDouble *nodeonpattyn   = NULL;
-	IssmDouble *nodeonstokes   = NULL;
+	IssmDouble *nodeonSSA = NULL;
+	IssmDouble *nodeonHO   = NULL;
+	IssmDouble *nodeonFS   = NULL;
 	IssmDouble *nodeonbed      = NULL;
 	IssmDouble *nodeonicesheet = NULL;
@@ -47,16 +47,16 @@
 	iomodel->Constant(&g,ConstantsGEnum);
 	iomodel->Constant(&rho_ice,MaterialsRhoIceEnum);
-	iomodel->Constant(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
-	iomodel->Constant(&ismacayeal,FlowequationIsmacayealEnum);
-	iomodel->Constant(&isl1l2,FlowequationIsl1l2Enum);
-	iomodel->Constant(&ispattyn,FlowequationIspattynEnum);
-	iomodel->Constant(&isstokes,FlowequationIsstokesEnum);
-	iomodel->Constant(&fe_ssa,FlowequationFeSsaEnum);
+	iomodel->Constant(&FSreconditioning,DiagnosticFSreconditioningEnum);
+	iomodel->Constant(&isSSA,FlowequationIsSSAEnum);
+	iomodel->Constant(&isL1L2,FlowequationIsL1L2Enum);
+	iomodel->Constant(&isHO,FlowequationIsHOEnum);
+	iomodel->Constant(&isFS,FlowequationIsFSEnum);
+	iomodel->Constant(&fe_ssa,FlowequationFeSSAEnum);
 
 	/*Recover pointer: */
 	constraints=*pconstraints;
 
-	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
-	if(!ismacayeal & !ispattyn & !isstokes & !isl1l2){
+	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
+	if(!isSSA & !isHO & !isFS & !isL1L2){
 		*pconstraints=constraints;
 		return;
@@ -67,7 +67,7 @@
 	iomodel->FetchData(&spcvy,&My,&Ny,DiagnosticSpcvyEnum);
 	iomodel->FetchData(&spcvz,&Mz,&Nz,DiagnosticSpcvzEnum);
-	iomodel->FetchData(&nodeonmacayeal,NULL,NULL,FlowequationBordermacayealEnum);
-	if(iomodel->dim==3)iomodel->FetchData(&nodeonpattyn,NULL,NULL,FlowequationBorderpattynEnum);
-	if(iomodel->dim==3)iomodel->FetchData(&nodeonstokes,NULL,NULL,FlowequationBorderstokesEnum);
+	iomodel->FetchData(&nodeonSSA,NULL,NULL,FlowequationBorderSSAEnum);
+	if(iomodel->dim==3)iomodel->FetchData(&nodeonHO,NULL,NULL,FlowequationBorderHOEnum);
+	if(iomodel->dim==3)iomodel->FetchData(&nodeonFS,NULL,NULL,FlowequationBorderFSEnum);
 	if(iomodel->dim==3)iomodel->FetchData(&nodeonbed,NULL,NULL,MeshVertexonbedEnum);
 	if(iomodel->dim==3)iomodel->FetchData(&nodeonicesheet,NULL,NULL,MaskVertexongroundediceEnum);
@@ -99,8 +99,8 @@
 		if(iomodel->my_vertices[i]){
 
-			/*Start with adding spcs of coupling: zero at the border macayeal/pattyn for the appropriate dofs*/
-			if (reCast<int,IssmDouble>(vertices_type[i]==MacAyealPattynApproximationEnum)){
-				/*If grionmacayeal, spc pattyn dofs: 3 & 4*/
-					if (reCast<int,IssmDouble>(nodeonpattyn[i])){
+			/*Start with adding spcs of coupling: zero at the border SSA/HO for the appropriate dofs*/
+			if (reCast<int,IssmDouble>(vertices_type[i]==MacAyealHOApproximationEnum)){
+				/*If grionSSA, spc HO dofs: 3 & 4*/
+					if (reCast<int,IssmDouble>(nodeonHO[i])){
 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 						count++;
@@ -117,5 +117,5 @@
 
 					}
-					else if (reCast<int,IssmDouble>(nodeonmacayeal[i])){
+					else if (reCast<int,IssmDouble>(nodeonSSA[i])){
 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 						count++;
@@ -132,10 +132,10 @@
 
 					}
-					else _error_("if vertices_type is MacAyealPattyn, you shoud have nodeonpattyn or nodeonmacayeal");
-			}
-			/*Also add spcs of coupling: zero at the border pattyn/stokes for the appropriate dofs*/
-			else if (reCast<int,IssmDouble>(vertices_type[i])==PattynStokesApproximationEnum){
-				/*If grion,pattyn spc stokes dofs: 3 4 & 5*/
-					if (reCast<int,IssmDouble>(nodeonpattyn[i])){
+					else _error_("if vertices_type is MacAyealHO, you shoud have nodeonHO or nodeonSSA");
+			}
+			/*Also add spcs of coupling: zero at the border HO/FS for the appropriate dofs*/
+			else if (reCast<int,IssmDouble>(vertices_type[i])==HOFSApproximationEnum){
+				/*If grion,HO spc FS dofs: 3 4 & 5*/
+					if (reCast<int,IssmDouble>(nodeonHO[i])){
 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 						count++;
@@ -154,5 +154,5 @@
 
 					}
-					else if (reCast<int,IssmDouble>(nodeonstokes[i])){ //spc pattyn nodes: 1 & 2
+					else if (reCast<int,IssmDouble>(nodeonFS[i])){ //spc HO nodes: 1 & 2
 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 						count++;
@@ -172,10 +172,10 @@
 						}
 					}
-					else _error_("if vertices_type is PattynStokes, you shoud have nodeonpattyn or nodeonstokes");
-			}
-			/*Also add spcs of coupling: zero at the border pattyn/stokes for the appropriate dofs*/
-			else if (reCast<int,IssmDouble>(vertices_type[i])==MacAyealStokesApproximationEnum){
-				/*If grion,pattyn spc stokes dofs: 3 4 & 5*/
-					if (reCast<int,IssmDouble>(nodeonmacayeal[i])){
+					else _error_("if vertices_type is HOFS, you shoud have nodeonHO or nodeonFS");
+			}
+			/*Also add spcs of coupling: zero at the border HO/FS for the appropriate dofs*/
+			else if (reCast<int,IssmDouble>(vertices_type[i])==MacAyealFSApproximationEnum){
+				/*If grion,HO spc FS dofs: 3 4 & 5*/
+					if (reCast<int,IssmDouble>(nodeonSSA[i])){
 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 						count++;
@@ -194,5 +194,5 @@
 
 					}
-					else if (reCast<int,IssmDouble>(nodeonstokes[i])){ //spc macayeal nodes: 1 & 2
+					else if (reCast<int,IssmDouble>(nodeonFS[i])){ //spc SSA nodes: 1 & 2
 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 						count++;
@@ -212,5 +212,5 @@
 						}
 					}
-					else _error_("if vertices_type is MacAyealStokes, you shoud have nodeonmacayeal or nodeonstokes");
+					else _error_("if vertices_type is MacAyealFS, you shoud have nodeonSSA or nodeonFS");
 			}
 			/*Now add the regular spcs*/
@@ -236,5 +236,5 @@
 					xDelete<IssmDouble>(values);
 				}
-				else if (vertices_type[i]==HutterApproximationEnum){
+				else if (vertices_type[i]==SIAApproximationEnum){
 					constraints->AddObject(new SpcDynamic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,DiagnosticHorizAnalysisEnum));
 					count++;
@@ -259,10 +259,10 @@
 					xDelete<IssmDouble>(values);
 				}
-				else if (vertices_type[i]==HutterApproximationEnum){
+				else if (vertices_type[i]==SIAApproximationEnum){
 					constraints->AddObject(new SpcDynamic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,DiagnosticHorizAnalysisEnum));
 					count++;
 				}
 
-				if (reCast<int,IssmDouble>(vertices_type[i])==StokesApproximationEnum ||  (reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum)){
+				if (reCast<int,IssmDouble>(vertices_type[i])==FSApproximationEnum ||  (reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum)){
 					if (Mz==iomodel->numberofvertices && !xIsNan<IssmDouble>(spcvz[i])){
 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,spcvz[i]/yts,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
@@ -286,5 +286,5 @@
 				}
 				if (reCast<int,IssmDouble>(vertices_type[i])==NoneApproximationEnum){
-					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,g*rho_ice*(surface[i]-z[i])/stokesreconditioning,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
+					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,4,g*rho_ice*(surface[i]-z[i])/FSreconditioning,DiagnosticHorizAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
 					count++;
 				}
@@ -292,15 +292,15 @@
 
 			/*Constraint at the bedrock interface (v.n = vz = 0) (Coordinates will be updated according to the bed slope)*/
-			if (iomodel->dim==3) if(reCast<int,IssmDouble>(nodeonbed[i]) && reCast<int,IssmDouble>(nodeonicesheet[i]) && reCast<int,IssmDouble>(nodeonstokes[i])){
+			if (iomodel->dim==3) if(reCast<int,IssmDouble>(nodeonbed[i]) && reCast<int,IssmDouble>(nodeonicesheet[i]) && reCast<int,IssmDouble>(nodeonFS[i])){
 				 switch(reCast<int,IssmDouble>(vertices_type[i])){
-					case MacAyealStokesApproximationEnum:
+					case MacAyealFSApproximationEnum:
 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0.,DiagnosticHorizAnalysisEnum));
 						count++;
 						break;
-					case PattynStokesApproximationEnum:
+					case HOFSApproximationEnum:
 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,5,0.,DiagnosticHorizAnalysisEnum));
 						count++;
 						break;
-					case StokesApproximationEnum:
+					case FSApproximationEnum:
 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,3,0.,DiagnosticHorizAnalysisEnum));
 						count++;
@@ -313,5 +313,5 @@
 
 	/*SPC Quadratic elements*/
-	if(ismacayeal && fe_ssa==1){
+	if(isSSA && fe_ssa==1){
 
 		int   v1,v2;
@@ -338,5 +338,5 @@
 					count++;
 				}
-				if (reCast<int,IssmDouble>(vertices_type[v1])==StokesApproximationEnum ||  (reCast<int,IssmDouble>(vertices_type[v1])==NoneApproximationEnum)){
+				if (reCast<int,IssmDouble>(vertices_type[v1])==FSApproximationEnum ||  (reCast<int,IssmDouble>(vertices_type[v1])==NoneApproximationEnum)){
 					if(!xIsNan<IssmDouble>(spcvz[v1]) && !xIsNan<IssmDouble>(spcvz[v2])){
 						constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+iomodel->numberofvertices+i+1,
@@ -356,7 +356,7 @@
 	iomodel->DeleteData(spcvy,DiagnosticSpcvyEnum);
 	iomodel->DeleteData(spcvz,DiagnosticSpcvzEnum);
-	iomodel->DeleteData(nodeonmacayeal,FlowequationBordermacayealEnum);
-	if(iomodel->dim==3)iomodel->DeleteData(nodeonpattyn,FlowequationBorderpattynEnum);
-	if(iomodel->dim==3)iomodel->DeleteData(nodeonstokes,FlowequationBorderstokesEnum);
+	iomodel->DeleteData(nodeonSSA,FlowequationBorderSSAEnum);
+	if(iomodel->dim==3)iomodel->DeleteData(nodeonHO,FlowequationBorderHOEnum);
+	if(iomodel->dim==3)iomodel->DeleteData(nodeonFS,FlowequationBorderFSEnum);
 	if(iomodel->dim==3)iomodel->DeleteData(nodeonbed,MeshVertexonbedEnum);
 	if(iomodel->dim==3)iomodel->DeleteData(nodeonicesheet,MaskVertexongroundediceEnum);
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 15564)
@@ -19,5 +19,5 @@
 	int         count;
 	int         penpair_ids[2];
-	bool        ismacayeal,isl1l2,ispattyn,isstokes;
+	bool        isSSA,isL1L2,isHO,isFS;
 	int         numpenalties,numberofpressureloads,numrifts,numriftsegments;
 	IssmDouble *pressureload   = NULL;
@@ -26,5 +26,5 @@
 	IssmDouble *riftinfo       = NULL;
 	IssmDouble *nodeonbed      = NULL;
-	IssmDouble *nodeonstokes   = NULL;
+	IssmDouble *nodeonFS   = NULL;
 	IssmDouble *nodeonicesheet = NULL;
 	IssmDouble *vertices_type  = NULL;
@@ -32,8 +32,8 @@
 
 	/*Fetch parameters: */
-	iomodel->Constant(&isl1l2,FlowequationIsl1l2Enum);
-	iomodel->Constant(&isstokes,FlowequationIsstokesEnum);
-	iomodel->Constant(&ismacayeal,FlowequationIsmacayealEnum);
-	iomodel->Constant(&ispattyn,FlowequationIspattynEnum);
+	iomodel->Constant(&isL1L2,FlowequationIsL1L2Enum);
+	iomodel->Constant(&isFS,FlowequationIsFSEnum);
+	iomodel->Constant(&isSSA,FlowequationIsSSAEnum);
+	iomodel->Constant(&isHO,FlowequationIsHOEnum);
 	iomodel->Constant(&numrifts,RiftsNumriftsEnum);
 
@@ -41,6 +41,6 @@
 	Loads* loads=*ploads;
 
-	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
-	if(!ismacayeal & !ispattyn & !isstokes & !isl1l2) return;
+	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
+	if(!isSSA & !isHO & !isFS & !isL1L2) return;
 
 	/*Initialize counter: */
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 15564)
@@ -12,19 +12,19 @@
 
 	/*Intermediary*/
-	bool   ismacayeal,isl1l2,ispattyn,isstokes;
+	bool   isSSA,isL1L2,isHO,isFS;
 	int    finiteelementssa;
 
 	/*Fetch parameters: */
-	iomodel->Constant(&ismacayeal,FlowequationIsmacayealEnum);
-	iomodel->Constant(&isl1l2,FlowequationIsl1l2Enum);
-	iomodel->Constant(&ispattyn,FlowequationIspattynEnum);
-	iomodel->Constant(&isstokes,FlowequationIsstokesEnum);
-	iomodel->Constant(&finiteelementssa,FlowequationFeSsaEnum);
+	iomodel->Constant(&isSSA,FlowequationIsSSAEnum);
+	iomodel->Constant(&isL1L2,FlowequationIsL1L2Enum);
+	iomodel->Constant(&isHO,FlowequationIsHOEnum);
+	iomodel->Constant(&isFS,FlowequationIsFSEnum);
+	iomodel->Constant(&finiteelementssa,FlowequationFeSSAEnum);
 
-	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
-	if(!ismacayeal & !isl1l2 & !ispattyn & !isstokes) return;
+	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
+	if(!isSSA & !isL1L2 & !isHO & !isFS) return;
 
 	/*Create nodes: */
-	iomodel->FetchData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBordermacayealEnum,FlowequationBorderstokesEnum,
+	iomodel->FetchData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
 				MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,MaskVertexonwaterEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
 	if(finiteelementssa==0){
@@ -37,5 +37,5 @@
 		_error_("finite element not supported yet");
 	}
-	iomodel->DeleteData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBordermacayealEnum,FlowequationBorderstokesEnum,
+	iomodel->DeleteData(9,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,FlowequationBorderSSAEnum,FlowequationBorderFSEnum,
 				MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,MaskVertexonwaterEnum,FlowequationVertexEquationEnum,DiagnosticReferentialEnum);
 }
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHoriz/UpdateElementsDiagnosticHoriz.cpp	(revision 15564)
@@ -17,19 +17,19 @@
 
 	int    materials_type;
-	bool   ismacayeal,isl1l2,ispattyn,isstokes;
+	bool   isSSA,isL1L2,isHO,isFS;
 	bool   control_analysis;
 	bool   dakota_analysis;
 
 	/*Fetch constants needed: */
-	iomodel->Constant(&ismacayeal,FlowequationIsmacayealEnum);
-	iomodel->Constant(&isl1l2,FlowequationIsl1l2Enum);
-	iomodel->Constant(&ispattyn,FlowequationIspattynEnum);
-	iomodel->Constant(&isstokes,FlowequationIsstokesEnum);
+	iomodel->Constant(&isSSA,FlowequationIsSSAEnum);
+	iomodel->Constant(&isL1L2,FlowequationIsL1L2Enum);
+	iomodel->Constant(&isHO,FlowequationIsHOEnum);
+	iomodel->Constant(&isFS,FlowequationIsFSEnum);
 	iomodel->Constant(&control_analysis,InversionIscontrolEnum);
 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
 	iomodel->Constant(&materials_type,MaterialsEnum);
 
-	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
-	if(!ismacayeal & !isl1l2 & !ispattyn & !isstokes) return;
+	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
+	if(!isSSA & !isL1L2 & !isHO & !isFS) return;
 
 	/*Fetch data needed: */
@@ -72,5 +72,5 @@
 		iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);
 		iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);
-		iomodel->FetchDataToInput(elements,FlowequationBorderstokesEnum);
+		iomodel->FetchDataToInput(elements,FlowequationBorderFSEnum);
 		iomodel->FetchDataToInput(elements,LoadingforceZEnum);
 	}
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp	(revision 15564)
@@ -1,4 +1,4 @@
 /*
- * CreateConstraintsDiagnosticHutter.c:
+ * CreateConstraintsDiagnosticSIA.c:
  */
 
@@ -8,10 +8,10 @@
 #include "../ModelProcessorx.h"
 
-void	CreateConstraintsDiagnosticHutter(Constraints** pconstraints, IoModel* iomodel){
+void	CreateConstraintsDiagnosticSIA(Constraints** pconstraints, IoModel* iomodel){
 
 	/*Intermediary*/
 	int        count;
 	IssmDouble yts;
-	bool       ishutter;
+	bool       isSIA;
 
 	/*Output*/
@@ -24,8 +24,8 @@
 	/*Fetch parameters: */
 	iomodel->Constant(&yts,ConstantsYtsEnum);
-	iomodel->Constant(&ishutter,FlowequationIshutterEnum);
+	iomodel->Constant(&isSIA,FlowequationIsSIAEnum);
 
-	/*Now, is the flag ishutter on? otherwise, do nothing: */
-	if (!ishutter) return;
+	/*Now, is the flag isSIA on? otherwise, do nothing: */
+	if (!isSIA) return;
 
 	/*Fetch data: */
@@ -35,24 +35,24 @@
 	count=0;
 
-	/*vx and vy are spc'd if we are not on nodeonhutter: */
+	/*vx and vy are spc'd if we are not on nodeonSIA: */
 	for(int i=0;i<iomodel->numberofvertices;i++){
 		/*keep only this partition's nodes:*/
 		if((iomodel->my_vertices[i])){
-			if (!reCast<int,IssmDouble>(iomodel->Data(FlowequationVertexEquationEnum)[i])==HutterApproximationEnum){
+			if (!reCast<int,IssmDouble>(iomodel->Data(FlowequationVertexEquationEnum)[i])==SIAApproximationEnum){
 
-				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticHutterAnalysisEnum));
+				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticSIAAnalysisEnum));
 				count++;
 
-				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,DiagnosticHutterAnalysisEnum));
+				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,0,DiagnosticSIAAnalysisEnum));
 				count++;
 			}
 			else{
 				if (!xIsNan<IssmDouble>(iomodel->Data(DiagnosticSpcvxEnum)[i])){
-					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,iomodel->Data(DiagnosticSpcvxEnum)[i]/yts,DiagnosticHutterAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
+					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,iomodel->Data(DiagnosticSpcvxEnum)[i]/yts,DiagnosticSIAAnalysisEnum)); //add count'th spc, on node i+1, setting dof 1 to vx.
 					count++;
 				}
 
 				if (!xIsNan<IssmDouble>(iomodel->Data(DiagnosticSpcvyEnum)[i])){
-					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,iomodel->Data(DiagnosticSpcvyEnum)[i]/yts,DiagnosticHutterAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
+					constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,2,iomodel->Data(DiagnosticSpcvyEnum)[i]/yts,DiagnosticSIAAnalysisEnum)); //add count'th spc, on node i+1, setting dof 2 to vy
 					count++;
 				}
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp	(revision 15564)
@@ -1,3 +1,3 @@
-/*! \file CreateLoadsDiagnosticHutter.c:
+/*! \file CreateLoadsDiagnosticSIA.c:
  */
 
@@ -7,5 +7,5 @@
 #include "../ModelProcessorx.h"
 
-void	CreateLoadsDiagnosticHutter(Loads** ploads, IoModel* iomodel){
+void	CreateLoadsDiagnosticSIA(Loads** ploads, IoModel* iomodel){
 
 	/*No loads*/
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 15564)
@@ -1,4 +1,4 @@
 /*
- * CreateNodesDiagnosticHutter.c:
+ * CreateNodesDiagnosticSIA.c:
  */
 
@@ -9,15 +9,15 @@
 #include "../ModelProcessorx.h"
 
-void	CreateNodesDiagnosticHutter(Nodes** pnodes, IoModel* iomodel){
+void	CreateNodesDiagnosticSIA(Nodes** pnodes, IoModel* iomodel){
 
 	/*Fetch parameters: */
-	bool ishutter;
-	iomodel->Constant(&ishutter,FlowequationIshutterEnum);
+	bool isSIA;
+	iomodel->Constant(&isSIA,FlowequationIsSIAEnum);
 
-	/*Now, is the flag ishutter on? otherwise, do nothing: */
-	if(!ishutter) return;
+	/*Now, is the flag isSIA on? otherwise, do nothing: */
+	if(!isSIA) return;
 
 	iomodel->FetchData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
-	CreateNodes(pnodes,iomodel,DiagnosticHutterAnalysisEnum,P1Enum);
+	CreateNodes(pnodes,iomodel,DiagnosticSIAAnalysisEnum,P1Enum);
 	iomodel->DeleteData(6,MeshVertexonbedEnum,MeshVertexonsurfaceEnum,MaskVertexongroundediceEnum,MaskVertexonfloatingiceEnum,FlowequationVertexEquationEnum,MaskVertexonwaterEnum);
 }
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp	(revision 15564)
@@ -1,4 +1,4 @@
 /*
- * UpdateElementsDiagnosticHutter:
+ * UpdateElementsDiagnosticSIA:
  */
 
@@ -9,12 +9,12 @@
 #include "../ModelProcessorx.h"
 
-void	UpdateElementsDiagnosticHutter(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
+void	UpdateElementsDiagnosticSIA(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
 
 	/*Fetch data needed: */
-	bool   ishutter;
-	iomodel->Constant(&ishutter,FlowequationIshutterEnum);
+	bool   isSIA;
+	iomodel->Constant(&isSIA,FlowequationIsSIAEnum);
 
-	/*Now, is the flag hutter on? otherwise, do nothing: */
-	if (!ishutter)return;
+	/*Now, is the flag SIA on? otherwise, do nothing: */
+	if (!isSIA)return;
 
 	iomodel->FetchData(1,FlowequationElementEquationEnum);
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp	(revision 15564)
@@ -24,5 +24,5 @@
 
 	/*Fetch data: */
-	iomodel->FetchData(2,DiagnosticSpcvzEnum,FlowequationBorderstokesEnum);
+	iomodel->FetchData(2,DiagnosticSpcvzEnum,FlowequationBorderFSEnum);
 
 	/*Initialize counter*/
@@ -35,6 +35,6 @@
 		if(iomodel->my_vertices[i]){
 
-			if (reCast<int,IssmDouble>(iomodel->Data(FlowequationBorderstokesEnum)[i])){
-				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticVertAnalysisEnum)); //spc to zero as vertical velocity is done in Horiz for Stokes
+			if (reCast<int,IssmDouble>(iomodel->Data(FlowequationBorderFSEnum)[i])){
+				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,0,DiagnosticVertAnalysisEnum)); //spc to zero as vertical velocity is done in Horiz for FS
 				count++;
 			}
@@ -49,5 +49,5 @@
 
 	/*Free data: */
-	iomodel->DeleteData(2,DiagnosticSpcvzEnum,FlowequationBorderstokesEnum);
+	iomodel->DeleteData(2,DiagnosticSpcvzEnum,FlowequationBorderFSEnum);
 
 	/*Assign output pointer: */
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 15564)
@@ -11,5 +11,5 @@
 void	CreateNodesDiagnosticVert(Nodes** pnodes, IoModel* iomodel){
 
-	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
+	/*Now, is the flag macayaealHO on? otherwise, do nothing: */
 	if(iomodel->dim==2) return;
 
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp	(revision 15564)
@@ -24,11 +24,11 @@
 					numdofs=2;
 					break;
-				case PattynApproximationEnum:
+				case HOApproximationEnum:
 					numdofs=2;
 					break;
-				case HutterApproximationEnum:
+				case SIAApproximationEnum:
 					numdofs=2;
 					break;
-				case StokesApproximationEnum:
+				case FSApproximationEnum:
 					numdofs=4;
 					break;
@@ -36,31 +36,31 @@
 					numdofs=4;
 					break;
-				case MacAyealPattynApproximationEnum:
+				case MacAyealHOApproximationEnum:
 					numdofs=4;
 					doftype=xNew<int>(numdofs);
 					doftype[0]=MacAyealApproximationEnum;
 					doftype[1]=MacAyealApproximationEnum;
-					doftype[2]=PattynApproximationEnum;
-					doftype[3]=PattynApproximationEnum;
+					doftype[2]=HOApproximationEnum;
+					doftype[3]=HOApproximationEnum;
 					break;
-				case PattynStokesApproximationEnum:
+				case HOFSApproximationEnum:
 					numdofs=6;
 					doftype=xNew<int>(numdofs);
-					doftype[0]=PattynApproximationEnum;
-					doftype[1]=PattynApproximationEnum;
-					doftype[2]=StokesApproximationEnum;
-					doftype[3]=StokesApproximationEnum;
-					doftype[4]=StokesApproximationEnum;
-					doftype[5]=StokesApproximationEnum;
+					doftype[0]=HOApproximationEnum;
+					doftype[1]=HOApproximationEnum;
+					doftype[2]=FSApproximationEnum;
+					doftype[3]=FSApproximationEnum;
+					doftype[4]=FSApproximationEnum;
+					doftype[5]=FSApproximationEnum;
 					break;
-				case MacAyealStokesApproximationEnum:
+				case MacAyealFSApproximationEnum:
 					numdofs=6;
 					doftype=xNew<int>(numdofs);
 					doftype[0]=MacAyealApproximationEnum;
 					doftype[1]=MacAyealApproximationEnum;
-					doftype[2]=StokesApproximationEnum;
-					doftype[3]=StokesApproximationEnum;
-					doftype[4]=StokesApproximationEnum;
-					doftype[5]=StokesApproximationEnum;
+					doftype[2]=FSApproximationEnum;
+					doftype[3]=FSApproximationEnum;
+					doftype[4]=FSApproximationEnum;
+					doftype[5]=FSApproximationEnum;
 					break;
 				default:
@@ -72,5 +72,5 @@
 			numdofs=1;
 			break;
-		case DiagnosticHutterAnalysisEnum:
+		case DiagnosticSIAAnalysisEnum:
 			numdofs=2;
 			break;
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 15564)
@@ -59,5 +59,5 @@
 		if(solution_type==TransientSolutionEnum && analysis_type==DiagnosticHorizAnalysisEnum && isdiagnostic==false) continue;
 		if(solution_type==TransientSolutionEnum && analysis_type==DiagnosticVertAnalysisEnum && isdiagnostic==false) continue;
-		if(solution_type==TransientSolutionEnum && analysis_type==DiagnosticHutterAnalysisEnum && isdiagnostic==false) continue;
+		if(solution_type==TransientSolutionEnum && analysis_type==DiagnosticSIAAnalysisEnum && isdiagnostic==false) continue;
 		if(solution_type==SteadystateSolutionEnum && analysis_type==ThermalAnalysisEnum && isenthalpy==true) continue;
 		if(solution_type==SteadystateSolutionEnum && analysis_type==MeltingAnalysisEnum && isenthalpy==true) continue;
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 15563)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 15564)
@@ -39,9 +39,9 @@
 void UpdateElementsDiagnosticVert(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
 
-/*diagnostic hutter*/
-void CreateNodesDiagnosticHutter(Nodes** pnodes,IoModel* iomodel);
-void CreateConstraintsDiagnosticHutter(Constraints** pconstraints,IoModel* iomodel);
-void CreateLoadsDiagnosticHutter(Loads** ploads, IoModel* iomodel);
-void UpdateElementsDiagnosticHutter(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
+/*diagnostic SIA*/
+void CreateNodesDiagnosticSIA(Nodes** pnodes,IoModel* iomodel);
+void CreateConstraintsDiagnosticSIA(Constraints** pconstraints,IoModel* iomodel);
+void CreateLoadsDiagnosticSIA(Loads** ploads, IoModel* iomodel);
+void UpdateElementsDiagnosticSIA(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
 
 #ifdef _HAVE_GIA_
Index: issm/trunk-jpl/src/c/modules/ResetCoordinateSystemx/ResetCoordinateSystemx.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ResetCoordinateSystemx/ResetCoordinateSystemx.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/modules/ResetCoordinateSystemx/ResetCoordinateSystemx.cpp	(revision 15564)
@@ -1,4 +1,4 @@
 /*!\file ResetCoordinateSystemx
- * \brief: reset coordinate system for full-Stokes: tangential to the bedrock
+ * \brief: reset coordinate system for full-FS: tangential to the bedrock
  */
 
Index: issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15563)
+++ issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 15564)
@@ -57,5 +57,5 @@
 	DiagnosticSpcvyEnum,
 	DiagnosticSpcvzEnum,
-	DiagnosticStokesreconditioningEnum,
+	DiagnosticFSreconditioningEnum,
 	DiagnosticVertexPairingEnum,
 	DiagnosticViscosityOvershootEnum,
@@ -63,15 +63,15 @@
 	LoadingforceYEnum,
 	LoadingforceZEnum,
-	FlowequationBordermacayealEnum,
-	FlowequationBorderpattynEnum,
-	FlowequationBorderstokesEnum,
+	FlowequationBorderSSAEnum,
+	FlowequationBorderHOEnum,
+	FlowequationBorderFSEnum,
 	FlowequationElementEquationEnum,
-	FlowequationIshutterEnum,
-	FlowequationIsmacayealEnum,
-	FlowequationIsl1l2Enum,
-	FlowequationIspattynEnum,
-	FlowequationIsstokesEnum,
-	FlowequationFeStokesEnum,
-	FlowequationFeSsaEnum,
+	FlowequationIsSIAEnum,
+	FlowequationIsSSAEnum,
+	FlowequationIsL1L2Enum,
+	FlowequationIsHOEnum,
+	FlowequationIsFSEnum,
+	FlowequationFeFSEnum,
+	FlowequationFeSSAEnum,
 	FlowequationVertexEquationEnum,
 	FrictionCoefficientEnum,
@@ -282,5 +282,5 @@
 	BedSlopeYAnalysisEnum,
 	DiagnosticHorizAnalysisEnum,
-	DiagnosticHutterAnalysisEnum,
+	DiagnosticSIAAnalysisEnum,
 	DiagnosticSolutionEnum,
 	DiagnosticVertAnalysisEnum,
@@ -310,12 +310,12 @@
 	ApproximationEnum,
 	NoneApproximationEnum,
-	HutterApproximationEnum,
+	SIAApproximationEnum,
 	MacAyealApproximationEnum,
-	MacAyealPattynApproximationEnum,
-	MacAyealStokesApproximationEnum,
+	MacAyealHOApproximationEnum,
+	MacAyealFSApproximationEnum,
 	L1L2ApproximationEnum,
-	PattynApproximationEnum,
-	PattynStokesApproximationEnum,
-	StokesApproximationEnum,
+	HOApproximationEnum,
+	HOFSApproximationEnum,
+	FSApproximationEnum,
 	/*}}}*/
 	/*Datasets {{{*/
@@ -366,5 +366,5 @@
 	ParamEnum,
 	L1L2IceFrontEnum,
-	PattynIceFrontEnum,
+	HOIceFrontEnum,
 	PengridEnum,
 	PenpairEnum,
@@ -382,5 +382,5 @@
 	SpcStaticEnum,
 	SpcTransientEnum,
-	StokesIceFrontEnum,
+	FSIceFrontEnum,
 	StringArrayParamEnum,
 	StringParamEnum,
@@ -461,7 +461,7 @@
 	VzEnum,
 	VzMacAyealEnum,
-	VzPattynEnum,
+	VzHOEnum,
 	VzPicardEnum,
-	VzStokesEnum,
+	VzFSEnum,
 	VxMeshEnum,
 	VyMeshEnum,
@@ -553,5 +553,5 @@
 	/*}}}*/
 	/*Solver{{{*/
-	StokesSolverEnum,
+	FSSolverEnum,
 	/*}}}*/
 	/*Parameters{{{*/
Index: issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 15564)
@@ -65,5 +65,5 @@
 		case DiagnosticSpcvyEnum : return "DiagnosticSpcvy";
 		case DiagnosticSpcvzEnum : return "DiagnosticSpcvz";
-		case DiagnosticStokesreconditioningEnum : return "DiagnosticStokesreconditioning";
+		case DiagnosticFSreconditioningEnum : return "DiagnosticFSreconditioning";
 		case DiagnosticVertexPairingEnum : return "DiagnosticVertexPairing";
 		case DiagnosticViscosityOvershootEnum : return "DiagnosticViscosityOvershoot";
@@ -71,15 +71,15 @@
 		case LoadingforceYEnum : return "LoadingforceY";
 		case LoadingforceZEnum : return "LoadingforceZ";
-		case FlowequationBordermacayealEnum : return "FlowequationBordermacayeal";
-		case FlowequationBorderpattynEnum : return "FlowequationBorderpattyn";
-		case FlowequationBorderstokesEnum : return "FlowequationBorderstokes";
+		case FlowequationBorderSSAEnum : return "FlowequationBorderSSA";
+		case FlowequationBorderHOEnum : return "FlowequationBorderHO";
+		case FlowequationBorderFSEnum : return "FlowequationBorderFS";
 		case FlowequationElementEquationEnum : return "FlowequationElementEquation";
-		case FlowequationIshutterEnum : return "FlowequationIshutter";
-		case FlowequationIsmacayealEnum : return "FlowequationIsmacayeal";
-		case FlowequationIsl1l2Enum : return "FlowequationIsl1l2";
-		case FlowequationIspattynEnum : return "FlowequationIspattyn";
-		case FlowequationIsstokesEnum : return "FlowequationIsstokes";
-		case FlowequationFeStokesEnum : return "FlowequationFeStokes";
-		case FlowequationFeSsaEnum : return "FlowequationFeSsa";
+		case FlowequationIsSIAEnum : return "FlowequationIsSIA";
+		case FlowequationIsSSAEnum : return "FlowequationIsSSA";
+		case FlowequationIsL1L2Enum : return "FlowequationIsL1L2";
+		case FlowequationIsHOEnum : return "FlowequationIsHO";
+		case FlowequationIsFSEnum : return "FlowequationIsFS";
+		case FlowequationFeFSEnum : return "FlowequationFeFS";
+		case FlowequationFeSSAEnum : return "FlowequationFeSSA";
 		case FlowequationVertexEquationEnum : return "FlowequationVertexEquation";
 		case FrictionCoefficientEnum : return "FrictionCoefficient";
@@ -288,5 +288,5 @@
 		case BedSlopeYAnalysisEnum : return "BedSlopeYAnalysis";
 		case DiagnosticHorizAnalysisEnum : return "DiagnosticHorizAnalysis";
-		case DiagnosticHutterAnalysisEnum : return "DiagnosticHutterAnalysis";
+		case DiagnosticSIAAnalysisEnum : return "DiagnosticSIAAnalysis";
 		case DiagnosticSolutionEnum : return "DiagnosticSolution";
 		case DiagnosticVertAnalysisEnum : return "DiagnosticVertAnalysis";
@@ -314,12 +314,12 @@
 		case ApproximationEnum : return "Approximation";
 		case NoneApproximationEnum : return "NoneApproximation";
-		case HutterApproximationEnum : return "HutterApproximation";
+		case SIAApproximationEnum : return "SIAApproximation";
 		case MacAyealApproximationEnum : return "MacAyealApproximation";
-		case MacAyealPattynApproximationEnum : return "MacAyealPattynApproximation";
-		case MacAyealStokesApproximationEnum : return "MacAyealStokesApproximation";
+		case MacAyealHOApproximationEnum : return "MacAyealHOApproximation";
+		case MacAyealFSApproximationEnum : return "MacAyealFSApproximation";
 		case L1L2ApproximationEnum : return "L1L2Approximation";
-		case PattynApproximationEnum : return "PattynApproximation";
-		case PattynStokesApproximationEnum : return "PattynStokesApproximation";
-		case StokesApproximationEnum : return "StokesApproximation";
+		case HOApproximationEnum : return "HOApproximation";
+		case HOFSApproximationEnum : return "HOFSApproximation";
+		case FSApproximationEnum : return "FSApproximation";
 		case ConstraintsEnum : return "Constraints";
 		case LoadsEnum : return "Loads";
@@ -366,5 +366,5 @@
 		case ParamEnum : return "Param";
 		case L1L2IceFrontEnum : return "L1L2IceFront";
-		case PattynIceFrontEnum : return "PattynIceFront";
+		case HOIceFrontEnum : return "HOIceFront";
 		case PengridEnum : return "Pengrid";
 		case PenpairEnum : return "Penpair";
@@ -382,5 +382,5 @@
 		case SpcStaticEnum : return "SpcStatic";
 		case SpcTransientEnum : return "SpcTransient";
-		case StokesIceFrontEnum : return "StokesIceFront";
+		case FSIceFrontEnum : return "FSIceFront";
 		case StringArrayParamEnum : return "StringArrayParam";
 		case StringParamEnum : return "StringParam";
@@ -455,7 +455,7 @@
 		case VzEnum : return "Vz";
 		case VzMacAyealEnum : return "VzMacAyeal";
-		case VzPattynEnum : return "VzPattyn";
+		case VzHOEnum : return "VzHO";
 		case VzPicardEnum : return "VzPicard";
-		case VzStokesEnum : return "VzStokes";
+		case VzFSEnum : return "VzFS";
 		case VxMeshEnum : return "VxMesh";
 		case VyMeshEnum : return "VyMesh";
@@ -535,5 +535,5 @@
 		case SubelementMigration2Enum : return "SubelementMigration2";
 		case GLlevelsetEnum : return "GLlevelset";
-		case StokesSolverEnum : return "StokesSolver";
+		case FSSolverEnum : return "FSSolver";
 		case AdjointEnum : return "Adjoint";
 		case ColinearEnum : return "Colinear";
Index: issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 15564)
@@ -65,5 +65,5 @@
 	      else if (strcmp(name,"DiagnosticSpcvy")==0) return DiagnosticSpcvyEnum;
 	      else if (strcmp(name,"DiagnosticSpcvz")==0) return DiagnosticSpcvzEnum;
-	      else if (strcmp(name,"DiagnosticStokesreconditioning")==0) return DiagnosticStokesreconditioningEnum;
+	      else if (strcmp(name,"DiagnosticFSreconditioning")==0) return DiagnosticFSreconditioningEnum;
 	      else if (strcmp(name,"DiagnosticVertexPairing")==0) return DiagnosticVertexPairingEnum;
 	      else if (strcmp(name,"DiagnosticViscosityOvershoot")==0) return DiagnosticViscosityOvershootEnum;
@@ -71,15 +71,15 @@
 	      else if (strcmp(name,"LoadingforceY")==0) return LoadingforceYEnum;
 	      else if (strcmp(name,"LoadingforceZ")==0) return LoadingforceZEnum;
-	      else if (strcmp(name,"FlowequationBordermacayeal")==0) return FlowequationBordermacayealEnum;
-	      else if (strcmp(name,"FlowequationBorderpattyn")==0) return FlowequationBorderpattynEnum;
-	      else if (strcmp(name,"FlowequationBorderstokes")==0) return FlowequationBorderstokesEnum;
+	      else if (strcmp(name,"FlowequationBorderSSA")==0) return FlowequationBorderSSAEnum;
+	      else if (strcmp(name,"FlowequationBorderHO")==0) return FlowequationBorderHOEnum;
+	      else if (strcmp(name,"FlowequationBorderFS")==0) return FlowequationBorderFSEnum;
 	      else if (strcmp(name,"FlowequationElementEquation")==0) return FlowequationElementEquationEnum;
-	      else if (strcmp(name,"FlowequationIshutter")==0) return FlowequationIshutterEnum;
-	      else if (strcmp(name,"FlowequationIsmacayeal")==0) return FlowequationIsmacayealEnum;
-	      else if (strcmp(name,"FlowequationIsl1l2")==0) return FlowequationIsl1l2Enum;
-	      else if (strcmp(name,"FlowequationIspattyn")==0) return FlowequationIspattynEnum;
-	      else if (strcmp(name,"FlowequationIsstokes")==0) return FlowequationIsstokesEnum;
-	      else if (strcmp(name,"FlowequationFeStokes")==0) return FlowequationFeStokesEnum;
-	      else if (strcmp(name,"FlowequationFeSsa")==0) return FlowequationFeSsaEnum;
+	      else if (strcmp(name,"FlowequationIsSIA")==0) return FlowequationIsSIAEnum;
+	      else if (strcmp(name,"FlowequationIsSSA")==0) return FlowequationIsSSAEnum;
+	      else if (strcmp(name,"FlowequationIsL1L2")==0) return FlowequationIsL1L2Enum;
+	      else if (strcmp(name,"FlowequationIsHO")==0) return FlowequationIsHOEnum;
+	      else if (strcmp(name,"FlowequationIsFS")==0) return FlowequationIsFSEnum;
+	      else if (strcmp(name,"FlowequationFeFS")==0) return FlowequationFeFSEnum;
+	      else if (strcmp(name,"FlowequationFeSSA")==0) return FlowequationFeSSAEnum;
 	      else if (strcmp(name,"FlowequationVertexEquation")==0) return FlowequationVertexEquationEnum;
 	      else if (strcmp(name,"FrictionCoefficient")==0) return FrictionCoefficientEnum;
@@ -294,5 +294,5 @@
 	      else if (strcmp(name,"BedSlopeYAnalysis")==0) return BedSlopeYAnalysisEnum;
 	      else if (strcmp(name,"DiagnosticHorizAnalysis")==0) return DiagnosticHorizAnalysisEnum;
-	      else if (strcmp(name,"DiagnosticHutterAnalysis")==0) return DiagnosticHutterAnalysisEnum;
+	      else if (strcmp(name,"DiagnosticSIAAnalysis")==0) return DiagnosticSIAAnalysisEnum;
 	      else if (strcmp(name,"DiagnosticSolution")==0) return DiagnosticSolutionEnum;
 	      else if (strcmp(name,"DiagnosticVertAnalysis")==0) return DiagnosticVertAnalysisEnum;
@@ -320,12 +320,12 @@
 	      else if (strcmp(name,"Approximation")==0) return ApproximationEnum;
 	      else if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum;
-	      else if (strcmp(name,"HutterApproximation")==0) return HutterApproximationEnum;
+	      else if (strcmp(name,"SIAApproximation")==0) return SIAApproximationEnum;
 	      else if (strcmp(name,"MacAyealApproximation")==0) return MacAyealApproximationEnum;
-	      else if (strcmp(name,"MacAyealPattynApproximation")==0) return MacAyealPattynApproximationEnum;
-	      else if (strcmp(name,"MacAyealStokesApproximation")==0) return MacAyealStokesApproximationEnum;
+	      else if (strcmp(name,"MacAyealHOApproximation")==0) return MacAyealHOApproximationEnum;
+	      else if (strcmp(name,"MacAyealFSApproximation")==0) return MacAyealFSApproximationEnum;
 	      else if (strcmp(name,"L1L2Approximation")==0) return L1L2ApproximationEnum;
-	      else if (strcmp(name,"PattynApproximation")==0) return PattynApproximationEnum;
-	      else if (strcmp(name,"PattynStokesApproximation")==0) return PattynStokesApproximationEnum;
-	      else if (strcmp(name,"StokesApproximation")==0) return StokesApproximationEnum;
+	      else if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum;
+	      else if (strcmp(name,"HOFSApproximation")==0) return HOFSApproximationEnum;
+	      else if (strcmp(name,"FSApproximation")==0) return FSApproximationEnum;
 	      else if (strcmp(name,"Constraints")==0) return ConstraintsEnum;
 	      else if (strcmp(name,"Loads")==0) return LoadsEnum;
@@ -372,5 +372,5 @@
 	      else if (strcmp(name,"Param")==0) return ParamEnum;
 	      else if (strcmp(name,"L1L2IceFront")==0) return L1L2IceFrontEnum;
-	      else if (strcmp(name,"PattynIceFront")==0) return PattynIceFrontEnum;
+	      else if (strcmp(name,"HOIceFront")==0) return HOIceFrontEnum;
 	      else if (strcmp(name,"Pengrid")==0) return PengridEnum;
 	      else if (strcmp(name,"Penpair")==0) return PenpairEnum;
@@ -391,5 +391,5 @@
 	      else if (strcmp(name,"SpcStatic")==0) return SpcStaticEnum;
 	      else if (strcmp(name,"SpcTransient")==0) return SpcTransientEnum;
-	      else if (strcmp(name,"StokesIceFront")==0) return StokesIceFrontEnum;
+	      else if (strcmp(name,"FSIceFront")==0) return FSIceFrontEnum;
 	      else if (strcmp(name,"StringArrayParam")==0) return StringArrayParamEnum;
 	      else if (strcmp(name,"StringParam")==0) return StringParamEnum;
@@ -464,7 +464,7 @@
 	      else if (strcmp(name,"Vz")==0) return VzEnum;
 	      else if (strcmp(name,"VzMacAyeal")==0) return VzMacAyealEnum;
-	      else if (strcmp(name,"VzPattyn")==0) return VzPattynEnum;
+	      else if (strcmp(name,"VzHO")==0) return VzHOEnum;
 	      else if (strcmp(name,"VzPicard")==0) return VzPicardEnum;
-	      else if (strcmp(name,"VzStokes")==0) return VzStokesEnum;
+	      else if (strcmp(name,"VzFS")==0) return VzFSEnum;
 	      else if (strcmp(name,"VxMesh")==0) return VxMeshEnum;
 	      else if (strcmp(name,"VyMesh")==0) return VyMeshEnum;
@@ -547,5 +547,5 @@
 	      else if (strcmp(name,"SubelementMigration2")==0) return SubelementMigration2Enum;
 	      else if (strcmp(name,"GLlevelset")==0) return GLlevelsetEnum;
-	      else if (strcmp(name,"StokesSolver")==0) return StokesSolverEnum;
+	      else if (strcmp(name,"FSSolver")==0) return FSSolverEnum;
 	      else if (strcmp(name,"Adjoint")==0) return AdjointEnum;
 	      else if (strcmp(name,"Colinear")==0) return ColinearEnum;
Index: issm/trunk-jpl/src/c/solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp
===================================================================
--- issm/trunk-jpl/src/c/solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp	(revision 15564)
@@ -1,4 +1,4 @@
-/*!\file: solutionsequence_stokescoupling_nonlinear.cpp
- * \brief: core of the coupling between stokes and macayealpattyn
+/*!\file: solutionsequence_FScoupling_nonlinear.cpp
+ * \brief: core of the coupling between FS and SSAHO
  */ 
 
@@ -9,5 +9,5 @@
 #include "../modules/modules.h"
 
-void solutionsequence_stokescoupling_nonlinear(FemModel* femmodel,bool conserve_loads){
+void solutionsequence_FScoupling_nonlinear(FemModel* femmodel,bool conserve_loads){
 
 	/*intermediary: */
Index: issm/trunk-jpl/src/c/solutionsequences/solutionsequences.h
===================================================================
--- issm/trunk-jpl/src/c/solutionsequences/solutionsequences.h	(revision 15563)
+++ issm/trunk-jpl/src/c/solutionsequences/solutionsequences.h	(revision 15564)
@@ -16,5 +16,5 @@
 void solutionsequence_nonlinear(FemModel* femmodel,bool conserve_loads);
 void solutionsequence_newton(FemModel* femmodel);
-void solutionsequence_stokescoupling_nonlinear(FemModel* femmodel,bool conserve_loads);
+void solutionsequence_FScoupling_nonlinear(FemModel* femmodel,bool conserve_loads);
 void solutionsequence_linear(FemModel* femmodel);
 void solutionsequence_adjoint_linear(FemModel* femmodel);
Index: issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscSolver.cpp
===================================================================
--- issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscSolver.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscSolver.cpp	(revision 15564)
@@ -52,5 +52,5 @@
 	#endif
 
-	/*Stokes: */
+	/*FS: */
 	IS         isv=NULL;
 	IS         isp=NULL;
@@ -118,9 +118,9 @@
 	}
 
-	/*Stokes: */
-	if (solver_type==StokesSolverEnum){
+	/*FS: */
+	if (solver_type==FSSolverEnum){
 		/*Make indices out of doftypes: */
-		if(!df)_error_("need doftypes for Stokes solver!\n");
-		DofTypesToIndexSet(&isv,&isp,df,StokesSolverEnum);
+		if(!df)_error_("need doftypes for FS solver!\n");
+		DofTypesToIndexSet(&isv,&isp,df,FSSolverEnum);
 
 		/*Set field splits: */
@@ -179,5 +179,5 @@
 	int      velocity_count=0;
 
-	if(typeenum==StokesSolverEnum){
+	if(typeenum==FSSolverEnum){
 
 		/*Ok, recover doftypes vector values and indices: */
Index: issm/trunk-jpl/src/c/toolkits/petsc/patches/PetscOptionsDetermineSolverType.cpp
===================================================================
--- issm/trunk-jpl/src/c/toolkits/petsc/patches/PetscOptionsDetermineSolverType.cpp	(revision 15563)
+++ issm/trunk-jpl/src/c/toolkits/petsc/patches/PetscOptionsDetermineSolverType.cpp	(revision 15564)
@@ -60,6 +60,6 @@
 
 	PetscOptionsGetString(PETSC_NULL,"-issm_option_solver",&option[0],100,&flag);
-	if (strcmp(option,"stokes")==0){
-		solver_type=StokesSolverEnum;
+	if (strcmp(option,"FS")==0){
+		solver_type=FSSolverEnum;
 	}
 
Index: issm/trunk-jpl/src/m/classes/diagnostic.m
===================================================================
--- issm/trunk-jpl/src/m/classes/diagnostic.m	(revision 15563)
+++ issm/trunk-jpl/src/m/classes/diagnostic.m	(revision 15564)
@@ -13,5 +13,5 @@
 		abstol                   = 0;
 		isnewton                 = 0;
-		stokesreconditioning     = 0;
+		FSreconditioning     = 0;
 		viscosity_overshoot      = 0;
 		icefront                 = NaN;
@@ -45,5 +45,5 @@
 			 obj.abstol=10;
 
-			 obj.stokesreconditioning=10^13;
+			 obj.FSreconditioning=10^13;
 			 obj.shelf_dampening=0;
 
@@ -78,5 +78,5 @@
 			md = checkfield(md,'diagnostic.abstol','size',[1 1]);
 			md = checkfield(md,'diagnostic.isnewton','numel',[1],'values',[0 1 2]);
-			md = checkfield(md,'diagnostic.stokesreconditioning','size',[1 1],'NaN',1);
+			md = checkfield(md,'diagnostic.FSreconditioning','size',[1 1],'NaN',1);
 			md = checkfield(md,'diagnostic.viscosity_overshoot','size',[1 1],'NaN',1);
 			if md.mesh.dimension==2,
@@ -109,10 +109,10 @@
 			end
 			%CHECK THAT NO rotation specified for FS Grounded ice at base
-			if md.mesh.dimension==3 & md.flowequation.isstokes,
+			if md.mesh.dimension==3 & md.flowequation.isFS,
 				pos=find(md.mask.vertexongroundedice & md.mesh.vertexonbed);
 				if any(~isnan(md.diagnostic.referential(pos,:))),
 					md = checkmessage(md,['no referential should be specified for basal vertices of grounded ice']);
 				end
-				md = checkfield(md,'diagnostic.stokesreconditioning','>',0);
+				md = checkfield(md,'diagnostic.FSreconditioning','>',0);
 			end
 		end % }}}
@@ -144,6 +144,6 @@
 
 			disp(sprintf('\n      %s','Other:'));
-			fielddisplay(obj,'shelf_dampening','use dampening for floating ice ? Only for Stokes model');
-			fielddisplay(obj,'stokesreconditioning','multiplier for incompressibility equation. Only for Stokes model');
+			fielddisplay(obj,'shelf_dampening','use dampening for floating ice ? Only for FS model');
+			fielddisplay(obj,'FSreconditioning','multiplier for incompressibility equation. Only for FS model');
 			fielddisplay(obj,'referential','local referential');
 			fielddisplay(obj,'loadingforce','loading force applied on each point [N/m^3]');
@@ -159,5 +159,5 @@
 			WriteData(fid,'object',obj,'fieldname','abstol','format','Double');
 			WriteData(fid,'object',obj,'fieldname','isnewton','format','Integer');
-			WriteData(fid,'object',obj,'fieldname','stokesreconditioning','format','Double');
+			WriteData(fid,'object',obj,'fieldname','FSreconditioning','format','Double');
 			WriteData(fid,'object',obj,'fieldname','viscosity_overshoot','format','Double');
 			WriteData(fid,'object',obj,'fieldname','maxiter','format','Integer');
Index: issm/trunk-jpl/src/m/classes/diagnostic.py
===================================================================
--- issm/trunk-jpl/src/m/classes/diagnostic.py	(revision 15563)
+++ issm/trunk-jpl/src/m/classes/diagnostic.py	(revision 15564)
@@ -23,5 +23,5 @@
 		self.abstol                   = 0
 		self.isnewton                 = 0
-		self.stokesreconditioning     = 0
+		self.FSreconditioning     = 0
 		self.viscosity_overshoot      = 0
 		self.icefront                 = float('NaN')
@@ -66,6 +66,6 @@
 
 		string="%s\n%s"%(string,'\n      Other:')
-		string="%s\n%s"%(string,fielddisplay(self,'shelf_dampening','use dampening for floating ice ? Only for Stokes model'))
-		string="%s\n%s"%(string,fielddisplay(self,'stokesreconditioning','multiplier for incompressibility equation. Only for Stokes model'))
+		string="%s\n%s"%(string,fielddisplay(self,'shelf_dampening','use dampening for floating ice ? Only for FS model'))
+		string="%s\n%s"%(string,fielddisplay(self,'FSreconditioning','multiplier for incompressibility equation. Only for FS model'))
 		string="%s\n%s"%(string,fielddisplay(self,'referential','local referential'))
 		string="%s\n%s"%(string,fielddisplay(self,'loadingforce','loading force applied on each point [N/m^3]'))
@@ -83,5 +83,5 @@
 		self.abstol=10
 
-		self.stokesreconditioning=10**13
+		self.FSreconditioning=10**13
 		self.shelf_dampening=0
 
@@ -120,5 +120,5 @@
 		md = checkfield(md,'diagnostic.abstol','size',[1])
 		md = checkfield(md,'diagnostic.isnewton','numel',[1],'values',[0,1,2])
-		md = checkfield(md,'diagnostic.stokesreconditioning','size',[1],'NaN',1)
+		md = checkfield(md,'diagnostic.FSreconditioning','size',[1],'NaN',1)
 		md = checkfield(md,'diagnostic.viscosity_overshoot','size',[1],'NaN',1)
 		if md.mesh.dimension==2:
@@ -152,6 +152,6 @@
 					md.checkmessage("Vectors in diagnostic.referential (columns 1 to 3 and 4 to 6) must be orthogonal")
 		#CHECK THAT NO rotation specified for FS Grounded ice at base
-#		if md.mesh.dimension==3 & md.flowequation.isstokes,
-		if md.mesh.dimension==3 and md.flowequation.isstokes:
+#		if md.mesh.dimension==3 & md.flowequation.isFS,
+		if md.mesh.dimension==3 and md.flowequation.isFS:
 			pos=numpy.nonzero(numpy.logical_and(md.mask.vertexongroundedice,md.mesh.vertexonbed))
 			if numpy.any(numpy.logical_not(numpy.isnan(md.diagnostic.referential[pos,:]))):
@@ -168,5 +168,5 @@
 		WriteData(fid,'object',self,'fieldname','abstol','format','Double')
 		WriteData(fid,'object',self,'fieldname','isnewton','format','Integer')
-		WriteData(fid,'object',self,'fieldname','stokesreconditioning','format','Double')
+		WriteData(fid,'object',self,'fieldname','FSreconditioning','format','Double')
 		WriteData(fid,'object',self,'fieldname','viscosity_overshoot','format','Double')
 		WriteData(fid,'object',self,'fieldname','maxiter','format','Integer')
Index: issm/trunk-jpl/src/m/classes/flowequation.m
===================================================================
--- issm/trunk-jpl/src/m/classes/flowequation.m	(revision 15563)
+++ issm/trunk-jpl/src/m/classes/flowequation.m	(revision 15564)
@@ -6,16 +6,54 @@
 classdef flowequation
 	properties (SetAccess=public) 
-		ismacayeal       = 0;
-		ispattyn         = 0;
-		ishutter         = 0;
-		isl1l2           = 0;
-		isstokes         = 0;
-		fe_stokes        = 0;
-		fe_ssa           = 0;
+		isSIA            = 0;
+		isSSA            = 0;
+		isL1L2           = 0;
+		isHO             = 0;
+		isFS             = 0;
+		fe_SSA           = 0;
+		fe_FS            = 0;
 		vertex_equation  = NaN;
 		element_equation = NaN;
-		bordermacayeal   = NaN;
-		borderpattyn     = NaN;
-		borderstokes     = NaN;
+		borderSSA        = NaN;
+		borderHO         = NaN;
+		borderFS         = NaN;
+	end
+	methods (Static)
+		function obj = loadobj(obj) % {{{
+			% This function is directly called by matlab when a model object is
+			% loaded. If the input is a struct it is an old version of this class and
+			% old fields must be recovered (make sure they are in the deprecated
+			% model properties)
+
+			if verLessThan('matlab','7.9'),
+				disp('Warning: your matlab version is old and there is a risk that load does not work correctly');
+				disp('         if the model is not loaded correctly, rename temporarily loadobj so that matlab does not use it');
+
+				% This is a Matlab bug: all the fields of md have their default value
+				% Example of error message:
+				% Warning: Error loading an object of class 'model':
+				% Undefined function or method 'exist' for input arguments of type 'cell'
+				%
+				% This has been fixed in MATLAB 7.9 (R2009b) and later versions
+			end
+
+			if isstruct(obj)
+				disp('Recovering flowequation from older version');
+				objstruct = obj;
+				obj = structtoobj(flowequation(),objstruct);
+
+				%2013 July 23rd
+				if isfield(objstruct,'isSIA'),          obj.isSIA     = objstruct.isSIA;         end;
+				if isfield(objstruct,'isSSA'),          obj.isSSA     = objstruct.isSSA;         end;
+				if isfield(objstruct,'isL1L2'),         obj.isL1L2    = objstruct.isL1L2;        end;
+				if isfield(objstruct,'isHO'),           obj.isHO      = objstruct.isHO;          end;
+				if isfield(objstruct,'isFS'),           obj.isFS      = objstruct.isFS;          end;
+				if isfield(objstruct,'fe_FS'),      obj.fe_FS     = objstruct.fe_FS;     end;
+				if isfield(objstruct,'borderSSA'), obj.borderSSA = objstruct.borderSSA;end;
+				if isfield(objstruct,'borderHO'),   obj.borderHO  = objstruct.borderHO;  end;
+				if isfield(objstruct,'borderFS'),   obj.borderFS  = objstruct.borderFS;  end;
+			end
+
+		end% }}}
 	end
 	methods
@@ -35,12 +73,12 @@
 			if ismember(DiagnosticHorizAnalysisEnum(),analyses),
 
-				md = checkfield(md,'flowequation.ishutter','numel',[1],'values',[0 1]);
-				md = checkfield(md,'flowequation.ismacayeal','numel',[1],'values',[0 1]);
-				md = checkfield(md,'flowequation.isl1l2','numel',[1],'values',[0 1]);
-				md = checkfield(md,'flowequation.ispattyn','numel',[1],'values',[0 1]);
-				md = checkfield(md,'flowequation.isstokes','numel',[1],'values',[0 1]);
-				md = checkfield(md,'flowequation.bordermacayeal','size',[md.mesh.numberofvertices 1],'values',[0 1]);
-				md = checkfield(md,'flowequation.borderpattyn','size',[md.mesh.numberofvertices 1],'values',[0 1]);
-				md = checkfield(md,'flowequation.borderstokes','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+				md = checkfield(md,'flowequation.isSIA','numel',[1],'values',[0 1]);
+				md = checkfield(md,'flowequation.isSSA','numel',[1],'values',[0 1]);
+				md = checkfield(md,'flowequation.isL1L2','numel',[1],'values',[0 1]);
+				md = checkfield(md,'flowequation.isHO','numel',[1],'values',[0 1]);
+				md = checkfield(md,'flowequation.isFS','numel',[1],'values',[0 1]);
+				md = checkfield(md,'flowequation.borderSSA','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+				md = checkfield(md,'flowequation.borderHO','size',[md.mesh.numberofvertices 1],'values',[0 1]);
+				md = checkfield(md,'flowequation.borderFS','size',[md.mesh.numberofvertices 1],'values',[0 1]);
 				if (md.mesh.dimension==2),
 					md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices 1],'values',[1:2]);
@@ -50,12 +88,12 @@
 					md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements 1],'values',[0:8]);
 				end
-				if ~(obj.ishutter || obj.ismacayeal || obj.isl1l2 || obj.ispattyn || obj.isstokes),
+				if ~(obj.isSIA || obj.isSSA || obj.isL1L2 || obj.isHO || obj.isFS),
 					md = checkmessage(md,['no element types set for this model']);
 				end
 			end
-			if ismember(DiagnosticHutterAnalysisEnum(),analyses),
+			if ismember(DiagnosticSIAAnalysisEnum(),analyses),
 				if any(obj.element_equation==1),
 					if(obj.element_equation & md.mask.elementonfloatingice),
-						disp(sprintf('\n !!! Warning: Hutter''s model is not consistent on ice shelves !!!\n'));
+						disp(sprintf('\n !!! Warning: SIA''s model is not consistent on ice shelves !!!\n'));
 					end
 				end
@@ -66,49 +104,49 @@
 			disp(sprintf('   flow equation parameters:'));
 
-			fielddisplay(obj,'ishutter','is the shallow ice approximation used ?');
-			fielddisplay(obj,'ismacayeal','is the macayeal approximation used ?');
-			fielddisplay(obj,'isl1l2','is the l1l2 approximation used ?');
-			fielddisplay(obj,'ispattyn','is the pattyn approximation used ?');
-			fielddisplay(obj,'isstokes','are the Full-Stokes equations used ?');
-			fielddisplay(obj,'fe_ssa','Finite Element for SSA   0: Lagrange P1 (linear), 1: Lagrange P2 (quadratic)');
+			fielddisplay(obj,'isSIA','is the Shallow Ice Approximation (SIA) used ?');
+			fielddisplay(obj,'isSSA','is the Shelfy-Stream Approximation (SSA) used ?');
+			fielddisplay(obj,'isL1L2','is the L1L2 approximation used ?');
+			fielddisplay(obj,'isHO','is the Higher-Order (HO) approximation used ?');
+			fielddisplay(obj,'isFS','are the Full-FS (FS) equations used ?');
+			fielddisplay(obj,'fe_SSA','Finite Element for SSA   0: Lagrange P1 (linear), 1: Lagrange P2 (quadratic)');
 			fielddisplay(obj,'vertex_equation','flow equation for each vertex');
 			fielddisplay(obj,'element_equation','flow equation for each element');
-			fielddisplay(obj,'bordermacayeal','vertices on MacAyeal''s border (for tiling)');
-			fielddisplay(obj,'borderpattyn','vertices on Pattyn''s border (for tiling)');
-			fielddisplay(obj,'borderstokes','vertices on Stokes'' border (for tiling)');
+			fielddisplay(obj,'borderSSA','vertices on SSA''s border (for tiling)');
+			fielddisplay(obj,'borderHO','vertices on HO''s border (for tiling)');
+			fielddisplay(obj,'borderFS','vertices on FS'' border (for tiling)');
 
 		end % }}}
 		function marshall(obj,md,fid) % {{{
-			WriteData(fid,'object',obj,'fieldname','ishutter','format','Boolean');
-			WriteData(fid,'object',obj,'fieldname','ismacayeal','format','Boolean');
-			WriteData(fid,'object',obj,'fieldname','isl1l2','format','Boolean');
-			WriteData(fid,'object',obj,'fieldname','ispattyn','format','Boolean');
-			WriteData(fid,'object',obj,'fieldname','isstokes','format','Boolean');
-			WriteData(fid,'object',obj,'fieldname','fe_stokes','format','Integer');
-			WriteData(fid,'object',obj,'fieldname','fe_ssa','format','Integer');
-			WriteData(fid,'object',obj,'fieldname','bordermacayeal','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',obj,'fieldname','borderpattyn','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',obj,'fieldname','borderstokes','format','DoubleMat','mattype',1);
+			WriteData(fid,'object',obj,'fieldname','isSIA','format','Boolean');
+			WriteData(fid,'object',obj,'fieldname','isSSA','format','Boolean');
+			WriteData(fid,'object',obj,'fieldname','isL1L2','format','Boolean');
+			WriteData(fid,'object',obj,'fieldname','isHO','format','Boolean');
+			WriteData(fid,'object',obj,'fieldname','isFS','format','Boolean');
+			WriteData(fid,'object',obj,'fieldname','fe_FS','format','Integer');
+			WriteData(fid,'object',obj,'fieldname','fe_SSA','format','Integer');
+			WriteData(fid,'object',obj,'fieldname','borderSSA','format','DoubleMat','mattype',1);
+			WriteData(fid,'object',obj,'fieldname','borderHO','format','DoubleMat','mattype',1);
+			WriteData(fid,'object',obj,'fieldname','borderFS','format','DoubleMat','mattype',1);
 			%convert approximations to enums
 			data=obj.vertex_equation;
 			pos=find(data==0); data(pos,end)=NoneApproximationEnum();
-			pos=find(data==1); data(pos,end)=HutterApproximationEnum();
+			pos=find(data==1); data(pos,end)=SIAApproximationEnum();
 			pos=find(data==2); data(pos,end)=MacAyealApproximationEnum();
-			pos=find(data==3); data(pos,end)=PattynApproximationEnum();
-			pos=find(data==4); data(pos,end)=StokesApproximationEnum();
-			pos=find(data==5); data(pos,end)=MacAyealPattynApproximationEnum();
-			pos=find(data==6); data(pos,end)=MacAyealStokesApproximationEnum();
-			pos=find(data==7); data(pos,end)=PattynStokesApproximationEnum();
+			pos=find(data==3); data(pos,end)=HOApproximationEnum();
+			pos=find(data==4); data(pos,end)=FSApproximationEnum();
+			pos=find(data==5); data(pos,end)=MacAyealHOApproximationEnum();
+			pos=find(data==6); data(pos,end)=MacAyealFSApproximationEnum();
+			pos=find(data==7); data(pos,end)=HOFSApproximationEnum();
 			pos=find(data==8); data(pos,end)=L1L2ApproximationEnum();
 			WriteData(fid,'data',data,'enum',FlowequationVertexEquationEnum(),'format','DoubleMat','mattype',1);
 			data=obj.element_equation;
 			pos=find(data==0); data(pos,end)=NoneApproximationEnum();
-			pos=find(data==1); data(pos,end)=HutterApproximationEnum();
+			pos=find(data==1); data(pos,end)=SIAApproximationEnum();
 			pos=find(data==2); data(pos,end)=MacAyealApproximationEnum();
-			pos=find(data==3); data(pos,end)=PattynApproximationEnum();
-			pos=find(data==4); data(pos,end)=StokesApproximationEnum();
-			pos=find(data==5); data(pos,end)=MacAyealPattynApproximationEnum();
-			pos=find(data==6); data(pos,end)=MacAyealStokesApproximationEnum();
-			pos=find(data==7); data(pos,end)=PattynStokesApproximationEnum();
+			pos=find(data==3); data(pos,end)=HOApproximationEnum();
+			pos=find(data==4); data(pos,end)=FSApproximationEnum();
+			pos=find(data==5); data(pos,end)=MacAyealHOApproximationEnum();
+			pos=find(data==6); data(pos,end)=MacAyealFSApproximationEnum();
+			pos=find(data==7); data(pos,end)=HOFSApproximationEnum();
 			pos=find(data==8); data(pos,end)=L1L2ApproximationEnum();
 			WriteData(fid,'data',data,'enum',FlowequationElementEquationEnum(),'format','DoubleMat','mattype',2);
Index: issm/trunk-jpl/src/m/classes/flowequation.py
===================================================================
--- issm/trunk-jpl/src/m/classes/flowequation.py	(revision 15563)
+++ issm/trunk-jpl/src/m/classes/flowequation.py	(revision 15564)
@@ -16,16 +16,16 @@
 	def __init__(self): # {{{
 		
-		self.ishutter         = 0
-		self.ismacayeal       = 0
-		self.isl1l2           = 0
-		self.ispattyn         = 0
-		self.isstokes         = 0
-		self.fe_stokes        = 0
-		self.fe_ssa           = 0
+		self.isSIA            = 0
+		self.isSSA            = 0
+		self.isL1L2           = 0
+		self.isHO             = 0
+		self.isFS             = 0
+		self.fe_SSA           = 0
+		self.fe_FS            = 0
 		self.vertex_equation  = float('NaN')
 		self.element_equation = float('NaN')
-		self.bordermacayeal   = float('NaN')
-		self.borderpattyn     = float('NaN')
-		self.borderstokes     = float('NaN')
+		self.borderSSA        = float('NaN')
+		self.borderHO         = float('NaN')
+		self.borderFS         = float('NaN')
 
 		#set defaults
@@ -36,15 +36,15 @@
 		string='   flow equation parameters:'
 
-		string="%s\n%s"%(string,fielddisplay(self,'ishutter',"is the shallow ice approximation used ?"))
-		string="%s\n%s"%(string,fielddisplay(self,'ismacayeal',"is the macayeal approximation used ?"))
-		string="%s\n%s"%(string,fielddisplay(self,'isl1l2',"are l1l2 equations used ?"))
-		string="%s\n%s"%(string,fielddisplay(self,'ispattyn',"is the pattyn approximation used ?"))
-		string="%s\n%s"%(string,fielddisplay(self,'isstokes',"are the Full-Stokes equations used ?"))
-		string="%s\n%s"%(string,fielddisplay(self,'fe_ssa',"Finite Element for SSA   0: Lagrange P1 (linear), 1: Lagrange P2 (quadratic)"))
+		string="%s\n%s"%(string,fielddisplay(self,'isSIA',"is the Shallow Ice Approximation (SIA) used ?"))
+		string="%s\n%s"%(string,fielddisplay(self,'isSSA',"is the Shelfy-Stream Approximation (SSA) used ?"))
+		string="%s\n%s"%(string,fielddisplay(self,'isL1L2',"are L1L2 equations used ?"))
+		string="%s\n%s"%(string,fielddisplay(self,'isHO',"is the Higher-Order (HO) approximation used ?"))
+		string="%s\n%s"%(string,fielddisplay(self,'isFS',"are the Full-FS (FS) equations used ?"))
+		string="%s\n%s"%(string,fielddisplay(self,'fe_SSA',"Finite Element for SSA   0: Lagrange P1 (linear), 1: Lagrange P2 (quadratic)"))
 		string="%s\n%s"%(string,fielddisplay(self,'vertex_equation',"flow equation for each vertex"))
 		string="%s\n%s"%(string,fielddisplay(self,'element_equation',"flow equation for each element"))
-		string="%s\n%s"%(string,fielddisplay(self,'bordermacayeal',"vertices on MacAyeal's border (for tiling)"))
-		string="%s\n%s"%(string,fielddisplay(self,'borderpattyn',"vertices on Pattyn's border (for tiling)"))
-		string="%s\n%s"%(string,fielddisplay(self,'borderstokes',"vertices on Stokes' border (for tiling)"))
+		string="%s\n%s"%(string,fielddisplay(self,'borderSSA',"vertices on SSA's border (for tiling)"))
+		string="%s\n%s"%(string,fielddisplay(self,'borderHO',"vertices on HO's border (for tiling)"))
+		string="%s\n%s"%(string,fielddisplay(self,'borderFS',"vertices on FS' border (for tiling)"))
 		return string
 		#}}}
@@ -55,12 +55,12 @@
 
 		if DiagnosticHorizAnalysisEnum() in analyses:
-			md = checkfield(md,'flowequation.ishutter','numel',[1],'values',[0,1])
-			md = checkfield(md,'flowequation.ismacayeal','numel',[1],'values',[0,1])
-			md = checkfield(md,'flowequation.isl1l2','numel',[1],'values',[0,1])
-			md = checkfield(md,'flowequation.ispattyn','numel',[1],'values',[0,1])
-			md = checkfield(md,'flowequation.isstokes','numel',[1],'values',[0,1])
-			md = checkfield(md,'flowequation.bordermacayeal','size',[md.mesh.numberofvertices],'values',[0,1])
-			md = checkfield(md,'flowequation.borderpattyn','size',[md.mesh.numberofvertices],'values',[0,1])
-			md = checkfield(md,'flowequation.borderstokes','size',[md.mesh.numberofvertices],'values',[0,1])
+			md = checkfield(md,'flowequation.isSIA','numel',[1],'values',[0,1])
+			md = checkfield(md,'flowequation.isSSA','numel',[1],'values',[0,1])
+			md = checkfield(md,'flowequation.isL1L2','numel',[1],'values',[0,1])
+			md = checkfield(md,'flowequation.isHO','numel',[1],'values',[0,1])
+			md = checkfield(md,'flowequation.isFS','numel',[1],'values',[0,1])
+			md = checkfield(md,'flowequation.borderSSA','size',[md.mesh.numberofvertices],'values',[0,1])
+			md = checkfield(md,'flowequation.borderHO','size',[md.mesh.numberofvertices],'values',[0,1])
+			md = checkfield(md,'flowequation.borderFS','size',[md.mesh.numberofvertices],'values',[0,1])
 			if md.mesh.dimension==2:
 				md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices],'values',[1,2])
@@ -69,46 +69,46 @@
 				md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices],'values',numpy.arange(0,8+1))
 				md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements],'values',numpy.arange(0,8+1))
-			if not (self.ishutter or self.ismacayeal or self.isl1l2 or self.ispattyn or self.isstokes):
+			if not (self.isSIA or self.isSSA or self.isL1L2 or self.isHO or self.isFS):
 				md.checkmessage("no element types set for this model")
 
-		if DiagnosticHutterAnalysisEnum() in analyses:
+		if DiagnosticSIAAnalysisEnum() in analyses:
 			if any(self.element_equation==1):
 				if numpy.any(numpy.logical_and(self.element_equation,md.mask.elementonfloatingice)):
-					print "\n !!! Warning: Hutter's model is not consistent on ice shelves !!!\n"
+					print "\n !!! Warning: SIA's model is not consistent on ice shelves !!!\n"
 
 		return md
 	# }}}
 	def marshall(self,md,fid):    # {{{
-		WriteData(fid,'object',self,'fieldname','ishutter','format','Boolean')
-		WriteData(fid,'object',self,'fieldname','ismacayeal','format','Boolean')
-		WriteData(fid,'object',self,'fieldname','isl1l2','format','Boolean')
-		WriteData(fid,'object',self,'fieldname','ispattyn','format','Boolean')
-		WriteData(fid,'object',self,'fieldname','isstokes','format','Boolean')
-		WriteData(fid,'object',self,'fieldname','fe_stokes','format','Integer')
-		WriteData(fid,'object',self,'fieldname','fe_ssa','format','Integer')
-		WriteData(fid,'object',self,'fieldname','bordermacayeal','format','DoubleMat','mattype',1)
-		WriteData(fid,'object',self,'fieldname','borderpattyn','format','DoubleMat','mattype',1)
-		WriteData(fid,'object',self,'fieldname','borderstokes','format','DoubleMat','mattype',1)
+		WriteData(fid,'object',self,'fieldname','isSIA','format','Boolean')
+		WriteData(fid,'object',self,'fieldname','isSSA','format','Boolean')
+		WriteData(fid,'object',self,'fieldname','isL1L2','format','Boolean')
+		WriteData(fid,'object',self,'fieldname','isHO','format','Boolean')
+		WriteData(fid,'object',self,'fieldname','isFS','format','Boolean')
+		WriteData(fid,'object',self,'fieldname','fe_FS','format','Integer')
+		WriteData(fid,'object',self,'fieldname','fe_SSA','format','Integer')
+		WriteData(fid,'object',self,'fieldname','borderSSA','format','DoubleMat','mattype',1)
+		WriteData(fid,'object',self,'fieldname','borderHO','format','DoubleMat','mattype',1)
+		WriteData(fid,'object',self,'fieldname','borderFS','format','DoubleMat','mattype',1)
 		#convert approximations to enums
 		data=copy.deepcopy(self.vertex_equation)
 		data[numpy.nonzero(data==0)]=NoneApproximationEnum()
-		data[numpy.nonzero(data==1)]=HutterApproximationEnum()
+		data[numpy.nonzero(data==1)]=SIAApproximationEnum()
 		data[numpy.nonzero(data==2)]=MacAyealApproximationEnum()
-		data[numpy.nonzero(data==3)]=PattynApproximationEnum()
-		data[numpy.nonzero(data==4)]=StokesApproximationEnum()
-		data[numpy.nonzero(data==5)]=MacAyealPattynApproximationEnum()
-		data[numpy.nonzero(data==6)]=MacAyealStokesApproximationEnum()
-		data[numpy.nonzero(data==7)]=PattynStokesApproximationEnum()
+		data[numpy.nonzero(data==3)]=HOApproximationEnum()
+		data[numpy.nonzero(data==4)]=FSApproximationEnum()
+		data[numpy.nonzero(data==5)]=MacAyealHOApproximationEnum()
+		data[numpy.nonzero(data==6)]=MacAyealFSApproximationEnum()
+		data[numpy.nonzero(data==7)]=HOFSApproximationEnum()
 		data[numpy.nonzero(data==8)]=L1L2ApproximationEnum()
 		WriteData(fid,'data',data,'enum',FlowequationVertexEquationEnum(),'format','DoubleMat','mattype',1)
 		data=copy.deepcopy(self.element_equation)
 		data[numpy.nonzero(data==0)]=NoneApproximationEnum()
-		data[numpy.nonzero(data==1)]=HutterApproximationEnum()
+		data[numpy.nonzero(data==1)]=SIAApproximationEnum()
 		data[numpy.nonzero(data==2)]=MacAyealApproximationEnum()
-		data[numpy.nonzero(data==3)]=PattynApproximationEnum()
-		data[numpy.nonzero(data==4)]=StokesApproximationEnum()
-		data[numpy.nonzero(data==5)]=MacAyealPattynApproximationEnum()
-		data[numpy.nonzero(data==6)]=MacAyealStokesApproximationEnum()
-		data[numpy.nonzero(data==7)]=PattynStokesApproximationEnum()
+		data[numpy.nonzero(data==3)]=HOApproximationEnum()
+		data[numpy.nonzero(data==4)]=FSApproximationEnum()
+		data[numpy.nonzero(data==5)]=MacAyealHOApproximationEnum()
+		data[numpy.nonzero(data==6)]=MacAyealFSApproximationEnum()
+		data[numpy.nonzero(data==7)]=HOFSApproximationEnum()
 		data[numpy.nonzero(data==8)]=L1L2ApproximationEnum()
 		WriteData(fid,'data',data,'enum',FlowequationElementEquationEnum(),'format','DoubleMat','mattype',2)
Index: issm/trunk-jpl/src/m/classes/model/model.m
===================================================================
--- issm/trunk-jpl/src/m/classes/model/model.m	(revision 15563)
+++ issm/trunk-jpl/src/m/classes/model/model.m	(revision 15564)
@@ -171,7 +171,7 @@
 				md.flowequation.element_equation=project2d(md,md.flowequation.element_equation,1);
 				md.flowequation.vertex_equation=project2d(md,md.flowequation.vertex_equation,1);
-				md.flowequation.bordermacayeal=project2d(md,md.flowequation.bordermacayeal,1);
-				md.flowequation.borderpattyn=project2d(md,md.flowequation.borderpattyn,1);
-				md.flowequation.borderstokes=project2d(md,md.flowequation.borderstokes,1);
+				md.flowequation.borderSSA=project2d(md,md.flowequation.borderSSA,1);
+				md.flowequation.borderHO=project2d(md,md.flowequation.borderHO,1);
+				md.flowequation.borderFS=project2d(md,md.flowequation.borderFS,1);
 			end	
 
@@ -262,5 +262,5 @@
 			%   It can either be a domain file (argus type, .exp extension), or an array of element flags. 
 			%   If user wants every element outside the domain to be 
-			%   extract2d, add '~' to the name of the domain file (ex: '~Pattyn.exp');
+			%   extract2d, add '~' to the name of the domain file (ex: '~HO.exp');
 			%   an empty string '' will be considered as an empty domain
 			%   a string 'all' will be considered as the entire domain
@@ -718,7 +718,7 @@
 				md.flowequation.vertex_equation=project3d(md,'vector',oldvertices_type,'type','node');
 			end
-			md.flowequation.bordermacayeal=project3d(md,'vector',md.flowequation.bordermacayeal,'type','node');
-			md.flowequation.borderpattyn=project3d(md,'vector',md.flowequation.borderpattyn,'type','node');
-			md.flowequation.borderstokes=project3d(md,'vector',md.flowequation.borderstokes,'type','node');
+			md.flowequation.borderSSA=project3d(md,'vector',md.flowequation.borderSSA,'type','node');
+			md.flowequation.borderHO=project3d(md,'vector',md.flowequation.borderHO,'type','node');
+			md.flowequation.borderFS=project3d(md,'vector',md.flowequation.borderFS,'type','node');
 
 			%boundary conditions
@@ -882,6 +882,6 @@
 			if isfield(structmd,'artificial_diffusivity'), md.balancethickness.stabilization=structmd.artificial_diffusivity; end
 			if isfield(structmd,'dhdt'), md.balancethickness.thickening_rate=structmd.dhdt; end
-			if isfield(structmd,'ishutter'), md.flowequation.ishutter=structmd.ishutter; end
-			if isfield(structmd,'isstokes'), md.flowequation.isstokes=structmd.isstokes; end
+			if isfield(structmd,'isSIA'), md.flowequation.isSIA=structmd.isSIA; end
+			if isfield(structmd,'isFS'), md.flowequation.isFS=structmd.isFS; end
 			if isfield(structmd,'elements_type'), md.flowequation.element_equation=structmd.elements_type; end
 			if isfield(structmd,'vertices_type'), md.flowequation.vertex_equation=structmd.vertices_type; end
Index: issm/trunk-jpl/src/m/classes/model/model.py
===================================================================
--- issm/trunk-jpl/src/m/classes/model/model.py	(revision 15563)
+++ issm/trunk-jpl/src/m/classes/model/model.py	(revision 15564)
@@ -177,5 +177,5 @@
 		   It can either be a domain file (argus type, .exp extension), or an array of element flags. 
 		   If user wants every element outside the domain to be 
-		   extract2d, add '~' to the name of the domain file (ex: '~Pattyn.exp');
+		   extract2d, add '~' to the name of the domain file (ex: '~HO.exp');
 		   an empty string '' will be considered as an empty domain
 		   a string 'all' will be considered as the entire domain
@@ -613,7 +613,7 @@
 			md.flowequation.vertex_equation=project3d(md,'vector',oldvertices_type,'type','node')
 
-		md.flowequation.bordermacayeal=project3d(md,'vector',md.flowequation.bordermacayeal,'type','node')
-		md.flowequation.borderpattyn=project3d(md,'vector',md.flowequation.borderpattyn,'type','node')
-		md.flowequation.borderstokes=project3d(md,'vector',md.flowequation.borderstokes,'type','node')
+		md.flowequation.borderSSA=project3d(md,'vector',md.flowequation.borderSSA,'type','node')
+		md.flowequation.borderHO=project3d(md,'vector',md.flowequation.borderHO,'type','node')
+		md.flowequation.borderFS=project3d(md,'vector',md.flowequation.borderFS,'type','node')
 
 		#boundary conditions
Index: issm/trunk-jpl/src/m/classes/toolkits.m
===================================================================
--- issm/trunk-jpl/src/m/classes/toolkits.m	(revision 15563)
+++ issm/trunk-jpl/src/m/classes/toolkits.m	(revision 15564)
@@ -22,5 +22,5 @@
 		 function obj = addoptions(obj,analysis,varargin) % {{{
 		 % Usage example:
-		 %    md.toolkits=addoptions(md.toolkits,DiagnosticHorizAnalysisEnum(),stokesoptions());
+		 %    md.toolkits=addoptions(md.toolkits,DiagnosticHorizAnalysisEnum(),FSoptions());
 		 %    md.toolkits=addoptions(md.toolkits,DiagnosticHorizAnalysisEnum());
 
Index: issm/trunk-jpl/src/m/classes/toolkits.py
===================================================================
--- issm/trunk-jpl/src/m/classes/toolkits.py	(revision 15563)
+++ issm/trunk-jpl/src/m/classes/toolkits.py	(revision 15564)
@@ -39,5 +39,5 @@
 	def addoptions(self,analysis,*args):    # {{{
 		# Usage example:
-		#    md.toolkits=addoptions(md.toolkits,DiagnosticHorizAnalysisEnum(),stokesoptions());
+		#    md.toolkits=addoptions(md.toolkits,DiagnosticHorizAnalysisEnum(),FSoptions());
 		#    md.toolkits=addoptions(md.toolkits,DiagnosticHorizAnalysisEnum());
 
Index: issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.m
===================================================================
--- issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.m	(revision 15563)
+++ issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.m	(revision 15564)
@@ -47,9 +47,9 @@
 	case DiagnosticSolutionEnum(),
 		numanalyses=5;
-		analyses=[DiagnosticHorizAnalysisEnum();DiagnosticVertAnalysisEnum();DiagnosticHutterAnalysisEnum();SurfaceSlopeAnalysisEnum();BedSlopeAnalysisEnum()];
+		analyses=[DiagnosticHorizAnalysisEnum();DiagnosticVertAnalysisEnum();DiagnosticSIAAnalysisEnum();SurfaceSlopeAnalysisEnum();BedSlopeAnalysisEnum()];
 
 	case SteadystateSolutionEnum(),
 		numanalyses=7; 
-		analyses=[DiagnosticHorizAnalysisEnum();DiagnosticVertAnalysisEnum();DiagnosticHutterAnalysisEnum();SurfaceSlopeAnalysisEnum();BedSlopeAnalysisEnum();ThermalAnalysisEnum();MeltingAnalysisEnum()];
+		analyses=[DiagnosticHorizAnalysisEnum();DiagnosticVertAnalysisEnum();DiagnosticSIAAnalysisEnum();SurfaceSlopeAnalysisEnum();BedSlopeAnalysisEnum();ThermalAnalysisEnum();MeltingAnalysisEnum()];
 
 	case ThermalSolutionEnum(),
@@ -87,5 +87,5 @@
 	case TransientSolutionEnum(),
 		numanalyses=9; 
-		analyses=[DiagnosticHorizAnalysisEnum();DiagnosticVertAnalysisEnum();DiagnosticHutterAnalysisEnum();SurfaceSlopeAnalysisEnum();BedSlopeAnalysisEnum();ThermalAnalysisEnum();MeltingAnalysisEnum();EnthalpyAnalysisEnum();PrognosticAnalysisEnum()];
+		analyses=[DiagnosticHorizAnalysisEnum();DiagnosticVertAnalysisEnum();DiagnosticSIAAnalysisEnum();SurfaceSlopeAnalysisEnum();BedSlopeAnalysisEnum();ThermalAnalysisEnum();MeltingAnalysisEnum();EnthalpyAnalysisEnum();PrognosticAnalysisEnum()];
 
 	case FlaimSolutionEnum(),
Index: issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.py
===================================================================
--- issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.py	(revision 15563)
+++ issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.py	(revision 15564)
@@ -12,9 +12,9 @@
 	if   solutiontype == DiagnosticSolutionEnum():
 		numanalyses=5
-		analyses=[DiagnosticHorizAnalysisEnum(),DiagnosticVertAnalysisEnum(),DiagnosticHutterAnalysisEnum(),SurfaceSlopeAnalysisEnum(),BedSlopeAnalysisEnum()]
+		analyses=[DiagnosticHorizAnalysisEnum(),DiagnosticVertAnalysisEnum(),DiagnosticSIAAnalysisEnum(),SurfaceSlopeAnalysisEnum(),BedSlopeAnalysisEnum()]
 
 	elif solutiontype == SteadystateSolutionEnum():
 		numanalyses=7 
-		analyses=[DiagnosticHorizAnalysisEnum(),DiagnosticVertAnalysisEnum(),DiagnosticHutterAnalysisEnum(),SurfaceSlopeAnalysisEnum(),BedSlopeAnalysisEnum(),ThermalAnalysisEnum(),MeltingAnalysisEnum()]
+		analyses=[DiagnosticHorizAnalysisEnum(),DiagnosticVertAnalysisEnum(),DiagnosticSIAAnalysisEnum(),SurfaceSlopeAnalysisEnum(),BedSlopeAnalysisEnum(),ThermalAnalysisEnum(),MeltingAnalysisEnum()]
 
 	elif solutiontype == ThermalSolutionEnum():
@@ -48,5 +48,5 @@
 	elif solutiontype == TransientSolutionEnum():
 		numanalyses=9 
-		analyses=[DiagnosticHorizAnalysisEnum(),DiagnosticVertAnalysisEnum(),DiagnosticHutterAnalysisEnum(),SurfaceSlopeAnalysisEnum(),BedSlopeAnalysisEnum(),ThermalAnalysisEnum(),MeltingAnalysisEnum(),EnthalpyAnalysisEnum(),PrognosticAnalysisEnum()]
+		analyses=[DiagnosticHorizAnalysisEnum(),DiagnosticVertAnalysisEnum(),DiagnosticSIAAnalysisEnum(),SurfaceSlopeAnalysisEnum(),BedSlopeAnalysisEnum(),ThermalAnalysisEnum(),MeltingAnalysisEnum(),EnthalpyAnalysisEnum(),PrognosticAnalysisEnum()]
 
 	elif solutiontype == FlaimSolutionEnum():
Index: issm/trunk-jpl/src/m/contrib/hack/sia.m
===================================================================
--- issm/trunk-jpl/src/m/contrib/hack/sia.m	(revision 15563)
+++ issm/trunk-jpl/src/m/contrib/hack/sia.m	(revision 15564)
@@ -2,5 +2,5 @@
 %BALVEL - computation of Shallow Ice velocities
 %
-%   This routine uses the model of Hutter to compute the velocities
+%   This routine uses the model of SIA to compute the velocities
 %   of a 2d model using the surface slope
 %
Index: issm/trunk-jpl/src/m/enum/EnumDefinitions.py
===================================================================
--- issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15563)
+++ issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 15564)
@@ -681,17 +681,17 @@
 	return StringToEnum('DiagnosticSpcvz')[0]
 
-def DiagnosticStokesreconditioningEnum():
-	"""
-	DIAGNOSTICSTOKESRECONDITIONINGENUM - Enum of DiagnosticStokesreconditioning
-
-	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=DiagnosticStokesreconditioningEnum()
-	"""
-
-	return StringToEnum('DiagnosticStokesreconditioning')[0]
+def DiagnosticFSreconditioningEnum():
+	"""
+	DIAGNOSTICFSRECONDITIONINGENUM - Enum of DiagnosticFSreconditioning
+
+	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=DiagnosticFSreconditioningEnum()
+	"""
+
+	return StringToEnum('DiagnosticFSreconditioning')[0]
 
 def DiagnosticVertexPairingEnum():
@@ -765,45 +765,45 @@
 	return StringToEnum('LoadingforceZ')[0]
 
-def FlowequationBordermacayealEnum():
-	"""
-	FLOWEQUATIONBORDERMACAYEALENUM - Enum of FlowequationBordermacayeal
-
-	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=FlowequationBordermacayealEnum()
-	"""
-
-	return StringToEnum('FlowequationBordermacayeal')[0]
-
-def FlowequationBorderpattynEnum():
-	"""
-	FLOWEQUATIONBORDERPATTYNENUM - Enum of FlowequationBorderpattyn
-
-	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=FlowequationBorderpattynEnum()
-	"""
-
-	return StringToEnum('FlowequationBorderpattyn')[0]
-
-def FlowequationBorderstokesEnum():
-	"""
-	FLOWEQUATIONBORDERSTOKESENUM - Enum of FlowequationBorderstokes
-
-	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=FlowequationBorderstokesEnum()
-	"""
-
-	return StringToEnum('FlowequationBorderstokes')[0]
+def FlowequationBorderSSAEnum():
+	"""
+	FLOWEQUATIONBORDERSSAENUM - Enum of FlowequationBorderSSA
+
+	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=FlowequationBorderSSAEnum()
+	"""
+
+	return StringToEnum('FlowequationBorderSSA')[0]
+
+def FlowequationBorderHOEnum():
+	"""
+	FLOWEQUATIONBORDERHOENUM - Enum of FlowequationBorderHO
+
+	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=FlowequationBorderHOEnum()
+	"""
+
+	return StringToEnum('FlowequationBorderHO')[0]
+
+def FlowequationBorderFSEnum():
+	"""
+	FLOWEQUATIONBORDERFSENUM - Enum of FlowequationBorderFS
+
+	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=FlowequationBorderFSEnum()
+	"""
+
+	return StringToEnum('FlowequationBorderFS')[0]
 
 def FlowequationElementEquationEnum():
@@ -821,101 +821,101 @@
 	return StringToEnum('FlowequationElementEquation')[0]
 
-def FlowequationIshutterEnum():
-	"""
-	FLOWEQUATIONISHUTTERENUM - Enum of FlowequationIshutter
-
-	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=FlowequationIshutterEnum()
-	"""
-
-	return StringToEnum('FlowequationIshutter')[0]
-
-def FlowequationIsmacayealEnum():
-	"""
-	FLOWEQUATIONISMACAYEALENUM - Enum of FlowequationIsmacayeal
-
-	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=FlowequationIsmacayealEnum()
-	"""
-
-	return StringToEnum('FlowequationIsmacayeal')[0]
-
-def FlowequationIsl1l2Enum():
-	"""
-	FLOWEQUATIONISL1L2ENUM - Enum of FlowequationIsl1l2
-
-	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=FlowequationIsl1l2Enum()
-	"""
-
-	return StringToEnum('FlowequationIsl1l2')[0]
-
-def FlowequationIspattynEnum():
-	"""
-	FLOWEQUATIONISPATTYNENUM - Enum of FlowequationIspattyn
-
-	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=FlowequationIspattynEnum()
-	"""
-
-	return StringToEnum('FlowequationIspattyn')[0]
-
-def FlowequationIsstokesEnum():
-	"""
-	FLOWEQUATIONISSTOKESENUM - Enum of FlowequationIsstokes
-
-	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=FlowequationIsstokesEnum()
-	"""
-
-	return StringToEnum('FlowequationIsstokes')[0]
-
-def FlowequationFeStokesEnum():
-	"""
-	FLOWEQUATIONFESTOKESENUM - Enum of FlowequationFeStokes
-
-	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=FlowequationFeStokesEnum()
-	"""
-
-	return StringToEnum('FlowequationFeStokes')[0]
-
-def FlowequationFeSsaEnum():
-	"""
-	FLOWEQUATIONFESSAENUM - Enum of FlowequationFeSsa
-
-	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=FlowequationFeSsaEnum()
-	"""
-
-	return StringToEnum('FlowequationFeSsa')[0]
+def FlowequationIsSIAEnum():
+	"""
+	FLOWEQUATIONISSIAENUM - Enum of FlowequationIsSIA
+
+	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=FlowequationIsSIAEnum()
+	"""
+
+	return StringToEnum('FlowequationIsSIA')[0]
+
+def FlowequationIsSSAEnum():
+	"""
+	FLOWEQUATIONISSSAENUM - Enum of FlowequationIsSSA
+
+	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=FlowequationIsSSAEnum()
+	"""
+
+	return StringToEnum('FlowequationIsSSA')[0]
+
+def FlowequationIsL1L2Enum():
+	"""
+	FLOWEQUATIONISL1L2ENUM - Enum of FlowequationIsL1L2
+
+	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=FlowequationIsL1L2Enum()
+	"""
+
+	return StringToEnum('FlowequationIsL1L2')[0]
+
+def FlowequationIsHOEnum():
+	"""
+	FLOWEQUATIONISHOENUM - Enum of FlowequationIsHO
+
+	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=FlowequationIsHOEnum()
+	"""
+
+	return StringToEnum('FlowequationIsHO')[0]
+
+def FlowequationIsFSEnum():
+	"""
+	FLOWEQUATIONISFSENUM - Enum of FlowequationIsFS
+
+	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=FlowequationIsFSEnum()
+	"""
+
+	return StringToEnum('FlowequationIsFS')[0]
+
+def FlowequationFeFSEnum():
+	"""
+	FLOWEQUATIONFEFSENUM - Enum of FlowequationFeFS
+
+	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=FlowequationFeFSEnum()
+	"""
+
+	return StringToEnum('FlowequationFeFS')[0]
+
+def FlowequationFeSSAEnum():
+	"""
+	FLOWEQUATIONFESSAENUM - Enum of FlowequationFeSSA
+
+	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=FlowequationFeSSAEnum()
+	"""
+
+	return StringToEnum('FlowequationFeSSA')[0]
 
 def FlowequationVertexEquationEnum():
@@ -3803,17 +3803,17 @@
 	return StringToEnum('DiagnosticHorizAnalysis')[0]
 
-def DiagnosticHutterAnalysisEnum():
-	"""
-	DIAGNOSTICHUTTERANALYSISENUM - Enum of DiagnosticHutterAnalysis
-
-	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=DiagnosticHutterAnalysisEnum()
-	"""
-
-	return StringToEnum('DiagnosticHutterAnalysis')[0]
+def DiagnosticSIAAnalysisEnum():
+	"""
+	DIAGNOSTICSIAANALYSISENUM - Enum of DiagnosticSIAAnalysis
+
+	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=DiagnosticSIAAnalysisEnum()
+	"""
+
+	return StringToEnum('DiagnosticSIAAnalysis')[0]
 
 def DiagnosticSolutionEnum():
@@ -4167,17 +4167,17 @@
 	return StringToEnum('NoneApproximation')[0]
 
-def HutterApproximationEnum():
-	"""
-	HUTTERAPPROXIMATIONENUM - Enum of HutterApproximation
-
-	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=HutterApproximationEnum()
-	"""
-
-	return StringToEnum('HutterApproximation')[0]
+def SIAApproximationEnum():
+	"""
+	SIAAPPROXIMATIONENUM - Enum of SIAApproximation
+
+	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=SIAApproximationEnum()
+	"""
+
+	return StringToEnum('SIAApproximation')[0]
 
 def MacAyealApproximationEnum():
@@ -4195,31 +4195,31 @@
 	return StringToEnum('MacAyealApproximation')[0]
 
-def MacAyealPattynApproximationEnum():
-	"""
-	MACAYEALPATTYNAPPROXIMATIONENUM - Enum of MacAyealPattynApproximation
-
-	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=MacAyealPattynApproximationEnum()
-	"""
-
-	return StringToEnum('MacAyealPattynApproximation')[0]
-
-def MacAyealStokesApproximationEnum():
-	"""
-	MACAYEALSTOKESAPPROXIMATIONENUM - Enum of MacAyealStokesApproximation
-
-	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=MacAyealStokesApproximationEnum()
-	"""
-
-	return StringToEnum('MacAyealStokesApproximation')[0]
+def MacAyealHOApproximationEnum():
+	"""
+	MACAYEALHOAPPROXIMATIONENUM - Enum of MacAyealHOApproximation
+
+	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=MacAyealHOApproximationEnum()
+	"""
+
+	return StringToEnum('MacAyealHOApproximation')[0]
+
+def MacAyealFSApproximationEnum():
+	"""
+	MACAYEALFSAPPROXIMATIONENUM - Enum of MacAyealFSApproximation
+
+	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=MacAyealFSApproximationEnum()
+	"""
+
+	return StringToEnum('MacAyealFSApproximation')[0]
 
 def L1L2ApproximationEnum():
@@ -4237,45 +4237,45 @@
 	return StringToEnum('L1L2Approximation')[0]
 
-def PattynApproximationEnum():
-	"""
-	PATTYNAPPROXIMATIONENUM - Enum of PattynApproximation
-
-	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=PattynApproximationEnum()
-	"""
-
-	return StringToEnum('PattynApproximation')[0]
-
-def PattynStokesApproximationEnum():
-	"""
-	PATTYNSTOKESAPPROXIMATIONENUM - Enum of PattynStokesApproximation
-
-	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=PattynStokesApproximationEnum()
-	"""
-
-	return StringToEnum('PattynStokesApproximation')[0]
-
-def StokesApproximationEnum():
-	"""
-	STOKESAPPROXIMATIONENUM - Enum of StokesApproximation
-
-	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=StokesApproximationEnum()
-	"""
-
-	return StringToEnum('StokesApproximation')[0]
+def HOApproximationEnum():
+	"""
+	HOAPPROXIMATIONENUM - Enum of HOApproximation
+
+	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=HOApproximationEnum()
+	"""
+
+	return StringToEnum('HOApproximation')[0]
+
+def HOFSApproximationEnum():
+	"""
+	HOFSAPPROXIMATIONENUM - Enum of HOFSApproximation
+
+	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=HOFSApproximationEnum()
+	"""
+
+	return StringToEnum('HOFSApproximation')[0]
+
+def FSApproximationEnum():
+	"""
+	FSAPPROXIMATIONENUM - Enum of FSApproximation
+
+	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=FSApproximationEnum()
+	"""
+
+	return StringToEnum('FSApproximation')[0]
 
 def ConstraintsEnum():
@@ -4895,17 +4895,17 @@
 	return StringToEnum('L1L2IceFront')[0]
 
-def PattynIceFrontEnum():
-	"""
-	PATTYNICEFRONTENUM - Enum of PattynIceFront
-
-	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=PattynIceFrontEnum()
-	"""
-
-	return StringToEnum('PattynIceFront')[0]
+def HOIceFrontEnum():
+	"""
+	HOICEFRONTENUM - Enum of HOIceFront
+
+	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=HOIceFrontEnum()
+	"""
+
+	return StringToEnum('HOIceFront')[0]
 
 def PengridEnum():
@@ -5119,17 +5119,17 @@
 	return StringToEnum('SpcTransient')[0]
 
-def StokesIceFrontEnum():
-	"""
-	STOKESICEFRONTENUM - Enum of StokesIceFront
-
-	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=StokesIceFrontEnum()
-	"""
-
-	return StringToEnum('StokesIceFront')[0]
+def FSIceFrontEnum():
+	"""
+	FSICEFRONTENUM - Enum of FSIceFront
+
+	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=FSIceFrontEnum()
+	"""
+
+	return StringToEnum('FSIceFront')[0]
 
 def StringArrayParamEnum():
@@ -6141,17 +6141,17 @@
 	return StringToEnum('VzMacAyeal')[0]
 
-def VzPattynEnum():
-	"""
-	VZPATTYNENUM - Enum of VzPattyn
-
-	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=VzPattynEnum()
-	"""
-
-	return StringToEnum('VzPattyn')[0]
+def VzHOEnum():
+	"""
+	VZHOENUM - Enum of VzHO
+
+	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=VzHOEnum()
+	"""
+
+	return StringToEnum('VzHO')[0]
 
 def VzPicardEnum():
@@ -6169,17 +6169,17 @@
 	return StringToEnum('VzPicard')[0]
 
-def VzStokesEnum():
-	"""
-	VZSTOKESENUM - Enum of VzStokes
-
-	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=VzStokesEnum()
-	"""
-
-	return StringToEnum('VzStokes')[0]
+def VzFSEnum():
+	"""
+	VZFSENUM - Enum of VzFS
+
+	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=VzFSEnum()
+	"""
+
+	return StringToEnum('VzFS')[0]
 
 def VxMeshEnum():
@@ -7261,17 +7261,17 @@
 	return StringToEnum('GLlevelset')[0]
 
-def StokesSolverEnum():
-	"""
-	STOKESSOLVERENUM - Enum of StokesSolver
-
-	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=StokesSolverEnum()
-	"""
-
-	return StringToEnum('StokesSolver')[0]
+def FSSolverEnum():
+	"""
+	FSSOLVERENUM - Enum of FSSolver
+
+	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=FSSolverEnum()
+	"""
+
+	return StringToEnum('FSSolver')[0]
 
 def AdjointEnum():
Index: issm/trunk-jpl/src/m/mech/mechanicalproperties.m
===================================================================
--- issm/trunk-jpl/src/m/mech/mechanicalproperties.m	(revision 15563)
+++ issm/trunk-jpl/src/m/mech/mechanicalproperties.m	(revision 15564)
@@ -21,5 +21,5 @@
 end
 if any(md.flowequation.element_equation~=2),
-	disp('Warning: the model has some non macayeal elements. These will be treated like MacAyeal''s elements');
+	disp('Warning: the model has some non SSA elements. These will be treated like MacAyeal''s elements');
 end
 
Index: issm/trunk-jpl/src/m/mech/strainrateuncert.m
===================================================================
--- issm/trunk-jpl/src/m/mech/strainrateuncert.m	(revision 15563)
+++ issm/trunk-jpl/src/m/mech/strainrateuncert.m	(revision 15564)
@@ -36,5 +36,5 @@
 end
 if any(md.flowequation.element_equation~=2),
-	disp('Warning: the model has some non macayeal elements. These will be treated like MacAyeal''s elements');
+	disp('Warning: the model has some non SSA elements. These will be treated like MacAyeal''s elements');
 end
 
Index: issm/trunk-jpl/src/m/miscellaneous/issmdoc.m
===================================================================
--- issm/trunk-jpl/src/m/miscellaneous/issmdoc.m	(revision 15563)
+++ issm/trunk-jpl/src/m/miscellaneous/issmdoc.m	(revision 15564)
@@ -11,5 +11,5 @@
 disp(sprintf('%-63s %s','       md=setmask(md,''all'','''');','%defines the glacier system as an ice shelf (no island)'));
 disp(sprintf('%-63s %s','       md=parameterize(md,''Square.par'');','%fills all the other fields of the model'));
-disp(sprintf('%-63s %s','       md=setflowequation(md,''macayeal'',''all'');','%defines all elements as MacAyeal''s SSA'));
+disp(sprintf('%-63s %s','       md=setflowequation(md,''SSA'',''all'');','%defines all elements as MacAyeal''s SSA'));
 disp(sprintf('%-63s %s','       md=solve(md,DiagnosticSolutionEnum());','%solve for stress balance'));
 disp(sprintf('%-63s %s','       plotmodel(md,''data'',md.results.DiagnosticSolution.Vel);','%displays the velocity (type plotdoc for plotmodel help)'));
Index: issm/trunk-jpl/src/m/parameterization/setflowequation.m
===================================================================
--- issm/trunk-jpl/src/m/parameterization/setflowequation.m	(revision 15563)
+++ issm/trunk-jpl/src/m/parameterization/setflowequation.m	(revision 15564)
@@ -3,13 +3,13 @@
 %
 %   This routine works like plotmodel: it works with an even number of inputs
-%   'hutter','macayeal','l1l2','pattyn','stokes' and 'fill' are the possible options
+%   'SIA','SSA','L1L2','HO','FS' and 'fill' are the possible options
 %   that must be followed by the corresponding exp file or flags list
 %   It can either be a domain file (argus type, .exp extension), or an array of element flags. 
 %   If user wants every element outside the domain to be 
-%   setflowequationd, add '~' to the name of the domain file (ex: '~Pattyn.exp');
+%   setflowequationd, add '~' to the name of the domain file (ex: '~HO.exp');
 %   an empty string '' will be considered as an empty domain
 %   a string 'all' will be considered as the entire domain
 %   You can specify the type of coupling, 'penalties' or 'tiling', to use with the input 'coupling'
-%   NB: l1l2 cannot currently be coupled to any other ice flow model
+%   NB: L1L2 cannot currently be coupled to any other ice flow model
 %
 %   Usage:
@@ -17,6 +17,6 @@
 %
 %   Example:
-%      md=setflowequation(md,'pattyn','Pattyn.exp','macayeal',md.mask.elementonfloatingice,'fill','hutter');
-%      md=setflowequation(md,'pattyn','Pattyn.exp',fill','hutter','coupling','tiling');
+%      md=setflowequation(md,'HO','HO.exp','SSA',md.mask.elementonfloatingice,'fill','SIA');
+%      md=setflowequation(md,'HO','HO.exp',fill','SIA','coupling','tiling');
 
 %some checks on list of arguments
@@ -36,96 +36,97 @@
 
 %recover elements distribution
-hutterflag   = FlagElements(md,getfieldvalue(options,'hutter',''));
-macayealflag = FlagElements(md,getfieldvalue(options,'macayeal',''));
-pattynflag   = FlagElements(md,getfieldvalue(options,'pattyn',''));
-l1l2flag     = FlagElements(md,getfieldvalue(options,'l1l2',''));
-stokesflag   = FlagElements(md,getfieldvalue(options,'stokes',''));
-filltype     = getfieldvalue(options,'fill','none');
+SIAflag  = FlagElements(md,getfieldvalue(options,'SIA',''));
+SSAflag  = FlagElements(md,getfieldvalue(options,'SSA',''));
+HOflag   = FlagElements(md,getfieldvalue(options,'HO',''));
+L1L2flag = FlagElements(md,getfieldvalue(options,'L1L2',''));
+FSflag   = FlagElements(md,getfieldvalue(options,'FS',''));
+filltype = getfieldvalue(options,'fill','none');
+displayunused(options);
 
 %Flag the elements that have not been flagged as filltype
-if strcmpi(filltype,'hutter'),
-	hutterflag(find(~(macayealflag | pattynflag)))=1;
-elseif strcmpi(filltype,'macayeal'),
-	macayealflag(find(~(hutterflag | pattynflag | stokesflag)))=1;
-elseif strcmpi(filltype,'pattyn'),
-	pattynflag(find(~(hutterflag | macayealflag | stokesflag)))=1;
+if strcmpi(filltype,'SIA'),
+	SIAflag(find(~(SSAflag | HOflag)))=1;
+elseif strcmpi(filltype,'SSA'),
+	SSAflag(find(~(SIAflag | HOflag | FSflag)))=1;
+elseif strcmpi(filltype,'HO'),
+	HOflag(find(~(SIAflag | SSAflag | FSflag)))=1;
 end
 
 %check that each element has at least one flag
-if any(hutterflag+macayealflag+pattynflag+l1l2flag+stokesflag==0),
+if any(SIAflag+SSAflag+HOflag+L1L2flag+FSflag==0),
 	error('elements type not assigned, must be specified')
 end
 
 %check that each element has only one flag
-if any(hutterflag+macayealflag+pattynflag+l1l2flag+stokesflag>1),
+if any(SIAflag+SSAflag+HOflag+L1L2flag+FSflag>1),
 	disp('setflowequation warning message: some elements have several types, higher order type is used for them')
-	hutterflag(find(hutterflag & macayealflag))=0;
-	hutterflag(find(hutterflag & pattynflag))=0;
-	macayealflag(find(macayealflag & pattynflag))=0;
-end
-
-%check that l1l2 is not coupled to any other model for now
-if any(l1l2flag) & any(hutterflag | macayealflag | pattynflag | stokesflag)
-	error('l1l2 cannot be coupled to any other model');
-end
-
-%Check that no l1l2 or pattyn or stokes for 2d mesh
+	SIAflag(find(SIAflag & SSAflag))=0;
+	SIAflag(find(SIAflag & HOflag))=0;
+	SSAflag(find(SSAflag & HOflag))=0;
+end
+
+%check that L1L2 is not coupled to any other model for now
+if any(L1L2flag) & any(SIAflag | SSAflag | HOflag | FSflag)
+	error('L1L2 cannot be coupled to any other model');
+end
+
+%Check that no L1L2 or HO or FS for 2d mesh
 if (md.mesh.dimension==2),
-	if any(l1l2flag | stokesflag | pattynflag)
-		error('stokes and pattyn elements not allowed in 2d mesh, extrude it first')
-	end
-end
-
-%Stokes can only be used alone for now:
-if any(stokesflag) &any(hutterflag),
-	error('stokes cannot be used with any other model for now, put stokes everywhere')
+	if any(L1L2flag | FSflag | HOflag)
+		error('FS and HO elements not allowed in 2d mesh, extrude it first')
+	end
+end
+
+%FS can only be used alone for now:
+if any(FSflag) &any(SIAflag),
+	error('FS cannot be used with any other model for now, put FS everywhere')
 end
 
 %Initialize node fields
-nodeonhutter=zeros(md.mesh.numberofvertices,1);
-nodeonhutter(md.mesh.elements(find(hutterflag),:))=1;
-nodeonmacayeal=zeros(md.mesh.numberofvertices,1);
-nodeonmacayeal(md.mesh.elements(find(macayealflag),:))=1;
-nodeonpattyn=zeros(md.mesh.numberofvertices,1);
-nodeonpattyn(md.mesh.elements(find(pattynflag),:))=1;
-nodeonl1l2=zeros(md.mesh.numberofvertices,1);
-nodeonl1l2(md.mesh.elements(find(l1l2flag),:))=1;
-nodeonstokes=zeros(md.mesh.numberofvertices,1);
+nodeonSIA=zeros(md.mesh.numberofvertices,1);
+nodeonSIA(md.mesh.elements(find(SIAflag),:))=1;
+nodeonSSA=zeros(md.mesh.numberofvertices,1);
+nodeonSSA(md.mesh.elements(find(SSAflag),:))=1;
+nodeonHO=zeros(md.mesh.numberofvertices,1);
+nodeonHO(md.mesh.elements(find(HOflag),:))=1;
+nodeonL1L2=zeros(md.mesh.numberofvertices,1);
+nodeonL1L2(md.mesh.elements(find(L1L2flag),:))=1;
+nodeonFS=zeros(md.mesh.numberofvertices,1);
 noneflag=zeros(md.mesh.numberofelements,1);
 
-%First modify stokesflag to get rid of elements contrained everywhere (spc + border with pattyn or macayeal)
-if any(stokesflag),
-	fullspcnodes=double((~isnan(md.diagnostic.spcvx)+~isnan(md.diagnostic.spcvy)+~isnan(md.diagnostic.spcvz))==3 | (nodeonpattyn & nodeonstokes));         %find all the nodes on the boundary of the domain without icefront
+%First modify FSflag to get rid of elements contrained everywhere (spc + border with HO or SSA)
+if any(FSflag),
+	fullspcnodes=double((~isnan(md.diagnostic.spcvx)+~isnan(md.diagnostic.spcvy)+~isnan(md.diagnostic.spcvz))==3 | (nodeonHO & nodeonFS));         %find all the nodes on the boundary of the domain without icefront
 	fullspcelems=double(sum(fullspcnodes(md.mesh.elements),2)==6);         %find all the nodes on the boundary of the domain without icefront
-	stokesflag(find(fullspcelems))=0;
-	nodeonstokes(md.mesh.elements(find(stokesflag),:))=1;
-end
-
-%Then complete with NoneApproximation or the other model used if there is no stokes
-if any(stokesflag), 
-	if any(pattynflag), %fill with pattyn
-		pattynflag(~stokesflag)=1;
-		nodeonpattyn(md.mesh.elements(find(pattynflag),:))=1;
-	elseif any(macayealflag), %fill with macayeal
-		macayealflag(~stokesflag)=1;
-		nodeonmacayeal(md.mesh.elements(find(macayealflag),:))=1;
+	FSflag(find(fullspcelems))=0;
+	nodeonFS(md.mesh.elements(find(FSflag),:))=1;
+end
+
+%Then complete with NoneApproximation or the other model used if there is no FS
+if any(FSflag), 
+	if any(HOflag), %fill with HO
+		HOflag(~FSflag)=1;
+		nodeonHO(md.mesh.elements(find(HOflag),:))=1;
+	elseif any(SSAflag), %fill with SSA
+		SSAflag(~FSflag)=1;
+		nodeonSSA(md.mesh.elements(find(SSAflag),:))=1;
 	else %fill with none 
-		noneflag(find(~stokesflag))=1;
-	end
-end
-
-%Now take care of the coupling between MacAyeal and Pattyn
+		noneflag(find(~FSflag))=1;
+	end
+end
+
+%Now take care of the coupling between MacAyeal and HO
 md.diagnostic.vertex_pairing=[];
-nodeonmacayealpattyn=zeros(md.mesh.numberofvertices,1);
-nodeonpattynstokes=zeros(md.mesh.numberofvertices,1);
-nodeonmacayealstokes=zeros(md.mesh.numberofvertices,1);
-macayealpattynflag=zeros(md.mesh.numberofelements,1);
-macayealstokesflag=zeros(md.mesh.numberofelements,1);
-pattynstokesflag=zeros(md.mesh.numberofelements,1);
+nodeonSSAHO=zeros(md.mesh.numberofvertices,1);
+nodeonHOFS=zeros(md.mesh.numberofvertices,1);
+nodeonSSAFS=zeros(md.mesh.numberofvertices,1);
+SSAHOflag=zeros(md.mesh.numberofelements,1);
+SSAFSflag=zeros(md.mesh.numberofelements,1);
+HOFSflag=zeros(md.mesh.numberofelements,1);
 if strcmpi(coupling_method,'penalties'),
-	%Create the border nodes between Pattyn and MacAyeal and extrude them
+	%Create the border nodes between HO and MacAyeal and extrude them
 	numnodes2d=md.mesh.numberofvertices2d;
 	numlayers=md.mesh.numberoflayers;
-	bordernodes2d=find(nodeonpattyn(1:numnodes2d) & nodeonmacayeal(1:numnodes2d)); %Nodes connected to two different types of elements
+	bordernodes2d=find(nodeonHO(1:numnodes2d) & nodeonSSA(1:numnodes2d)); %Nodes connected to two different types of elements
 
 	%initialize and fill in penalties structure
@@ -138,164 +139,164 @@
 	end
 elseif strcmpi(coupling_method,'tiling'),
-	if any(macayealflag) & any(pattynflag), %coupling macayeal pattyn
+	if any(SSAflag) & any(HOflag), %coupling SSA HO
 		%Find node at the border
-		nodeonmacayealpattyn(find(nodeonmacayeal & nodeonpattyn))=1;
-		%Macayeal elements in contact with this layer become MacAyealPattyn elements
-		matrixelements=ismember(md.mesh.elements,find(nodeonmacayealpattyn));
+		nodeonSSAHO(find(nodeonSSA & nodeonHO))=1;
+		%SSA elements in contact with this layer become MacAyealHO elements
+		matrixelements=ismember(md.mesh.elements,find(nodeonSSAHO));
 		commonelements=sum(matrixelements,2)~=0;
-		commonelements(find(pattynflag))=0; %only one layer: the elements previously in macayeal
-		macayealflag(find(commonelements))=0; %these elements are now macayealpattynelements
-		macayealpattynflag(find(commonelements))=1;
-		nodeonmacayeal(:)=0;
-		nodeonmacayeal(md.mesh.elements(find(macayealflag),:))=1;
+		commonelements(find(HOflag))=0; %only one layer: the elements previously in SSA
+		SSAflag(find(commonelements))=0; %these elements are now SSAHOelements
+		SSAHOflag(find(commonelements))=1;
+		nodeonSSA(:)=0;
+		nodeonSSA(md.mesh.elements(find(SSAflag),:))=1;
 
 		%rule out elements that don't touch the 2 boundaries
-		pos=find(macayealpattynflag);
+		pos=find(SSAHOflag);
 		elist=zeros(length(pos),1);
-		elist = elist + any(sum(nodeonmacayeal(md.mesh.elements(pos,:)),2),2);
-		elist = elist - any(sum(nodeonpattyn(md.mesh.elements(pos,:))  ,2),2);
+		elist = elist + any(sum(nodeonSSA(md.mesh.elements(pos,:)),2),2);
+		elist = elist - any(sum(nodeonHO(md.mesh.elements(pos,:))  ,2),2);
 		pos1=find(elist==1);
-		macayealflag(pos(pos1))=1;
-		macayealpattynflag(pos(pos1))=0;
+		SSAflag(pos(pos1))=1;
+		SSAHOflag(pos(pos1))=0;
 		pos2=find(elist==-1);
-		pattynflag(pos(pos2))=1;
-		macayealpattynflag(pos(pos2))=0;
+		HOflag(pos(pos2))=1;
+		SSAHOflag(pos(pos2))=0;
 
 		%Recompute nodes associated to these elements
-		nodeonmacayeal(:)=0;
-		nodeonmacayeal(md.mesh.elements(find(macayealflag),:))=1;
-		nodeonpattyn(:)=0;
-		nodeonpattyn(md.mesh.elements(find(pattynflag),:))=1;
-		nodeonmacayealpattyn(:)=0;
-		nodeonmacayealpattyn(md.mesh.elements(find(macayealpattynflag),:))=1;
-
-	elseif any(pattynflag) & any(stokesflag), %coupling pattyn stokes
+		nodeonSSA(:)=0;
+		nodeonSSA(md.mesh.elements(find(SSAflag),:))=1;
+		nodeonHO(:)=0;
+		nodeonHO(md.mesh.elements(find(HOflag),:))=1;
+		nodeonSSAHO(:)=0;
+		nodeonSSAHO(md.mesh.elements(find(SSAHOflag),:))=1;
+
+	elseif any(HOflag) & any(FSflag), %coupling HO FS
 		%Find node at the border
-		nodeonpattynstokes(find(nodeonpattyn & nodeonstokes))=1;
-		%Stokes elements in contact with this layer become PattynStokes elements
-		matrixelements=ismember(md.mesh.elements,find(nodeonpattynstokes));
+		nodeonHOFS(find(nodeonHO & nodeonFS))=1;
+		%FS elements in contact with this layer become HOFS elements
+		matrixelements=ismember(md.mesh.elements,find(nodeonHOFS));
 		commonelements=sum(matrixelements,2)~=0;
-		commonelements(find(pattynflag))=0; %only one layer: the elements previously in macayeal
-		stokesflag(find(commonelements))=0; %these elements are now macayealpattynelements
-		pattynstokesflag(find(commonelements))=1;
-		nodeonstokes=zeros(md.mesh.numberofvertices,1);
-		nodeonstokes(md.mesh.elements(find(stokesflag),:))=1;
+		commonelements(find(HOflag))=0; %only one layer: the elements previously in SSA
+		FSflag(find(commonelements))=0; %these elements are now SSAHOelements
+		HOFSflag(find(commonelements))=1;
+		nodeonFS=zeros(md.mesh.numberofvertices,1);
+		nodeonFS(md.mesh.elements(find(FSflag),:))=1;
 
 		%rule out elements that don't touch the 2 boundaries
-		pos=find(pattynstokesflag);
+		pos=find(HOFSflag);
 		elist=zeros(length(pos),1);
-		elist = elist + any(sum(nodeonstokes(md.mesh.elements(pos,:)),2),2);
-		elist = elist - any(sum(nodeonpattyn(md.mesh.elements(pos,:)),2),2);
+		elist = elist + any(sum(nodeonFS(md.mesh.elements(pos,:)),2),2);
+		elist = elist - any(sum(nodeonHO(md.mesh.elements(pos,:)),2),2);
 		pos1=find(elist==1);
-		stokesflag(pos(pos1))=1;
-		pattynstokesflag(pos(pos1))=0;
+		FSflag(pos(pos1))=1;
+		HOFSflag(pos(pos1))=0;
 		pos2=find(elist==-1);
-		pattynflag(pos(pos2))=1;
-		pattynstokesflag(pos(pos2))=0;
+		HOflag(pos(pos2))=1;
+		HOFSflag(pos(pos2))=0;
 
 		%Recompute nodes associated to these elements
-		nodeonstokes(:)=0;
-		nodeonstokes(md.mesh.elements(find(stokesflag),:))=1;
-		nodeonpattyn(:)=0;
-		nodeonpattyn(md.mesh.elements(find(pattynflag),:))=1;
-		nodeonpattynstokes(:)=0;
-		nodeonpattynstokes(md.mesh.elements(find(pattynstokesflag),:))=1;
-
-	elseif any(stokesflag) & any(macayealflag),
+		nodeonFS(:)=0;
+		nodeonFS(md.mesh.elements(find(FSflag),:))=1;
+		nodeonHO(:)=0;
+		nodeonHO(md.mesh.elements(find(HOflag),:))=1;
+		nodeonHOFS(:)=0;
+		nodeonHOFS(md.mesh.elements(find(HOFSflag),:))=1;
+
+	elseif any(FSflag) & any(SSAflag),
 		%Find node at the border
-		nodeonmacayealstokes(find(nodeonmacayeal & nodeonstokes))=1;
-		%Stokes elements in contact with this layer become MacAyealStokes elements
-		matrixelements=ismember(md.mesh.elements,find(nodeonmacayealstokes));
+		nodeonSSAFS(find(nodeonSSA & nodeonFS))=1;
+		%FS elements in contact with this layer become MacAyealFS elements
+		matrixelements=ismember(md.mesh.elements,find(nodeonSSAFS));
 		commonelements=sum(matrixelements,2)~=0;
-		commonelements(find(macayealflag))=0; %only one layer: the elements previously in macayeal
-		stokesflag(find(commonelements))=0; %these elements are now macayealmacayealelements
-		macayealstokesflag(find(commonelements))=1;
-		nodeonstokes=zeros(md.mesh.numberofvertices,1);
-		nodeonstokes(md.mesh.elements(find(stokesflag),:))=1;
+		commonelements(find(SSAflag))=0; %only one layer: the elements previously in SSA
+		FSflag(find(commonelements))=0; %these elements are now SSASSAelements
+		SSAFSflag(find(commonelements))=1;
+		nodeonFS=zeros(md.mesh.numberofvertices,1);
+		nodeonFS(md.mesh.elements(find(FSflag),:))=1;
 
 		%rule out elements that don't touch the 2 boundaries
-		pos=find(macayealstokesflag);
+		pos=find(SSAFSflag);
 		elist=zeros(length(pos),1);
-		elist = elist + any(sum(nodeonmacayeal(md.mesh.elements(pos,:)),2),2);
-		elist = elist - any(sum(nodeonstokes(md.mesh.elements(pos,:))  ,2),2);
+		elist = elist + any(sum(nodeonSSA(md.mesh.elements(pos,:)),2),2);
+		elist = elist - any(sum(nodeonFS(md.mesh.elements(pos,:))  ,2),2);
 		pos1=find(elist==1);
-		macayealflag(pos(pos1))=1;
-		macayealstokesflag(pos(pos1))=0;
+		SSAflag(pos(pos1))=1;
+		SSAFSflag(pos(pos1))=0;
 		pos2=find(elist==-1);
-		stokesflag(pos(pos2))=1;
-		macayealstokesflag(pos(pos2))=0;
+		FSflag(pos(pos2))=1;
+		SSAFSflag(pos(pos2))=0;
 
 		%Recompute nodes associated to these elements
-		nodeonmacayeal(:)=0;
-		nodeonmacayeal(md.mesh.elements(find(macayealflag),:))=1;
-		nodeonstokes(:)=0;
-		nodeonstokes(md.mesh.elements(find(stokesflag),:))=1;
-		nodeonmacayealstokes(:)=0;
-		nodeonmacayealstokes(md.mesh.elements(find(macayealstokesflag),:))=1;
-
-	elseif any(stokesflag) & any(hutterflag),
+		nodeonSSA(:)=0;
+		nodeonSSA(md.mesh.elements(find(SSAflag),:))=1;
+		nodeonFS(:)=0;
+		nodeonFS(md.mesh.elements(find(FSflag),:))=1;
+		nodeonSSAFS(:)=0;
+		nodeonSSAFS(md.mesh.elements(find(SSAFSflag),:))=1;
+
+	elseif any(FSflag) & any(SIAflag),
 		error('type of coupling not supported yet');
 	end
 end
 
-%Create MacaAyealPattynApproximation where needed
+%Create MacaAyealHOApproximation where needed
 md.flowequation.element_equation=zeros(md.mesh.numberofelements,1);
 md.flowequation.element_equation(find(noneflag))=0;
-md.flowequation.element_equation(find(hutterflag))=1;
-md.flowequation.element_equation(find(macayealflag))=2;
-md.flowequation.element_equation(find(l1l2flag))=8;
-md.flowequation.element_equation(find(pattynflag))=3;
-md.flowequation.element_equation(find(stokesflag))=4;
-md.flowequation.element_equation(find(macayealpattynflag))=5;
-md.flowequation.element_equation(find(macayealstokesflag))=6;
-md.flowequation.element_equation(find(pattynstokesflag))=7;
+md.flowequation.element_equation(find(SIAflag))=1;
+md.flowequation.element_equation(find(SSAflag))=2;
+md.flowequation.element_equation(find(L1L2flag))=8;
+md.flowequation.element_equation(find(HOflag))=3;
+md.flowequation.element_equation(find(FSflag))=4;
+md.flowequation.element_equation(find(SSAHOflag))=5;
+md.flowequation.element_equation(find(SSAFSflag))=6;
+md.flowequation.element_equation(find(HOFSflag))=7;
 
 %border
-md.flowequation.borderpattyn=nodeonpattyn;
-md.flowequation.bordermacayeal=nodeonmacayeal;
-md.flowequation.borderstokes=nodeonstokes;
+md.flowequation.borderHO=nodeonHO;
+md.flowequation.borderSSA=nodeonSSA;
+md.flowequation.borderFS=nodeonFS;
 
 %Create vertices_type
 md.flowequation.vertex_equation=zeros(md.mesh.numberofvertices,1);
-pos=find(nodeonmacayeal);
+pos=find(nodeonSSA);
 md.flowequation.vertex_equation(pos)=2;
-pos=find(nodeonl1l2);
+pos=find(nodeonL1L2);
 md.flowequation.vertex_equation(pos)=8;
-pos=find(nodeonpattyn);
+pos=find(nodeonHO);
 md.flowequation.vertex_equation(pos)=3;
-pos=find(nodeonhutter);
+pos=find(nodeonSIA);
 md.flowequation.vertex_equation(pos)=1;
-pos=find(nodeonmacayealpattyn);
+pos=find(nodeonSSAHO);
 md.flowequation.vertex_equation(pos)=5;
-pos=find(nodeonstokes);
+pos=find(nodeonFS);
 md.flowequation.vertex_equation(pos)=4;
-if any(stokesflag),
-	pos=find(~nodeonstokes);
-	if(~any(pattynflag) & ~any(macayealflag)),
+if any(FSflag),
+	pos=find(~nodeonFS);
+	if(~any(HOflag) & ~any(SSAflag)),
 		md.flowequation.vertex_equation(pos)=0;
 	end
 end
-pos=find(nodeonpattynstokes);
+pos=find(nodeonHOFS);
 md.flowequation.vertex_equation(pos)=7;
-pos=find(nodeonmacayealstokes);
+pos=find(nodeonSSAFS);
 md.flowequation.vertex_equation(pos)=6;
 
 %figure out solution types
-md.flowequation.ishutter=double(any(md.flowequation.element_equation==1));
-md.flowequation.ismacayeal=double(any(md.flowequation.element_equation==2));
-md.flowequation.ispattyn=double(any(md.flowequation.element_equation==3));
-md.flowequation.isl1l2=double(any(md.flowequation.element_equation==8));
-md.flowequation.isstokes=double(any(md.flowequation.element_equation==4));
+md.flowequation.isSIA  = double(any(md.flowequation.element_equation == 1));
+md.flowequation.isSSA  = double(any(md.flowequation.element_equation == 2));
+md.flowequation.isHO   = double(any(md.flowequation.element_equation == 3));
+md.flowequation.isL1L2 = double(any(md.flowequation.element_equation == 8));
+md.flowequation.isFS   = double(any(md.flowequation.element_equation == 4));
 
 return
 
 %Check that tiling can work:
-if any(md.flowequation.bordermacayeal) & any(md.flowequation.borderpattyn) & any(md.flowequation.borderpattyn + md.flowequation.bordermacayeal ~=1),
+if any(md.flowequation.borderSSA) & any(md.flowequation.borderHO) & any(md.flowequation.borderHO + md.flowequation.borderSSA ~=1),
 	error('error coupling domain too irregular');
 end
-if any(md.flowequation.bordermacayeal) & any(md.flowequation.borderstokes) & any(md.flowequation.borderstokes + md.flowequation.bordermacayeal ~=1),
+if any(md.flowequation.borderSSA) & any(md.flowequation.borderFS) & any(md.flowequation.borderFS + md.flowequation.borderSSA ~=1),
 	error('error coupling domain too irregular');
 end
-if any(md.flowequation.borderstokes) & any(md.flowequation.borderpattyn) & any(md.flowequation.borderpattyn + md.flowequation.borderstokes~=1),
+if any(md.flowequation.borderFS) & any(md.flowequation.borderHO) & any(md.flowequation.borderHO + md.flowequation.borderFS~=1),
 	error('error coupling domain too irregular');
 end
Index: issm/trunk-jpl/src/m/parameterization/setflowequation.py
===================================================================
--- issm/trunk-jpl/src/m/parameterization/setflowequation.py	(revision 15563)
+++ issm/trunk-jpl/src/m/parameterization/setflowequation.py	(revision 15564)
@@ -11,9 +11,9 @@
 
 	   This routine works like plotmodel: it works with an even number of inputs
-	   'hutter','macayeal','pattyn','l1l2','stokes' and 'fill' are the possible options
+	   'SIA','SSA','HO','L1L2','FS' and 'fill' are the possible options
 	   that must be followed by the corresponding exp file or flags list
 	   It can either be a domain file (argus type, .exp extension), or an array of element flags. 
 	   If user wants every element outside the domain to be 
-	   setflowequationd, add '~' to the name of the domain file (ex: '~Pattyn.exp');
+	   setflowequationd, add '~' to the name of the domain file (ex: '~HO.exp');
 	   an empty string '' will be considered as an empty domain
 	   a string 'all' will be considered as the entire domain
@@ -24,6 +24,6 @@
 
 	   Example:
-	      md=setflowequation(md,'pattyn','Pattyn.exp','macayeal',md.mask.elementonfloatingice,'fill','hutter');
-	      md=setflowequation(md,'pattyn','Pattyn.exp',fill','hutter','coupling','tiling');
+	      md=setflowequation(md,'HO','HO.exp','SSA',md.mask.elementonfloatingice,'fill','SIA');
+	      md=setflowequation(md,'HO','HO.exp',fill','SIA','coupling','tiling');
 	"""
 
@@ -42,87 +42,87 @@
 
 	#recover elements distribution
-	hutterflag   = FlagElements(md,options.getfieldvalue('hutter',''))
-	macayealflag = FlagElements(md,options.getfieldvalue('macayeal',''))
-	pattynflag   = FlagElements(md,options.getfieldvalue('pattyn',''))
-	l1l2flag     = FlagElements(md,options.getfieldvalue('l1l2',''))
-	stokesflag   = FlagElements(md,options.getfieldvalue('stokes',''))
+	SIAflag   = FlagElements(md,options.getfieldvalue('SIA',''))
+	SSAflag = FlagElements(md,options.getfieldvalue('SSA',''))
+	HOflag   = FlagElements(md,options.getfieldvalue('HO',''))
+	L1L2flag     = FlagElements(md,options.getfieldvalue('L1L2',''))
+	FSflag   = FlagElements(md,options.getfieldvalue('FS',''))
 	filltype     = options.getfieldvalue('fill','none')
 
 	#Flag the elements that have not been flagged as filltype
-	if   strcmpi(filltype,'hutter'):
-		hutterflag[numpy.nonzero(numpy.logical_not(logical_or_n(macayealflag,pattynflag)))]=True
-	elif strcmpi(filltype,'macayeal'):
-		macayealflag[numpy.nonzero(numpy.logical_not(logical_or_n(hutterflag,pattynflag,stokesflag)))]=True
-	elif strcmpi(filltype,'pattyn'):
-		pattynflag[numpy.nonzero(numpy.logical_not(logical_or_n(hutterflag,macayealflag,stokesflag)))]=True
+	if   strcmpi(filltype,'SIA'):
+		SIAflag[numpy.nonzero(numpy.logical_not(logical_or_n(SSAflag,HOflag)))]=True
+	elif strcmpi(filltype,'SSA'):
+		SSAflag[numpy.nonzero(numpy.logical_not(logical_or_n(SIAflag,HOflag,FSflag)))]=True
+	elif strcmpi(filltype,'HO'):
+		HOflag[numpy.nonzero(numpy.logical_not(logical_or_n(SIAflag,SSAflag,FSflag)))]=True
 
 	#check that each element has at least one flag
-	if not any(hutterflag+macayealflag+l1l2flag+pattynflag+stokesflag):
+	if not any(SIAflag+SSAflag+L1L2flag+HOflag+FSflag):
 		raise TypeError("elements type not assigned, must be specified")
 
 	#check that each element has only one flag
-	if any(hutterflag+macayealflag+l1l2flag+pattynflag+stokesflag>1):
+	if any(SIAflag+SSAflag+L1L2flag+HOflag+FSflag>1):
 		print "setflowequation warning message: some elements have several types, higher order type is used for them"
-		hutterflag[numpy.nonzero(numpy.logical_and(hutterflag,macayealflag))]=False
-		hutterflag[numpy.nonzero(numpy.logical_and(hutterflag,pattynflag))]=False
-		macayealflag[numpy.nonzero(numpy.logical_and(macayealflag,pattynflag))]=False
-
-	#Check that no pattyn or stokes for 2d mesh
+		SIAflag[numpy.nonzero(numpy.logical_and(SIAflag,SSAflag))]=False
+		SIAflag[numpy.nonzero(numpy.logical_and(SIAflag,HOflag))]=False
+		SSAflag[numpy.nonzero(numpy.logical_and(SSAflag,HOflag))]=False
+
+	#Check that no HO or FS for 2d mesh
 	if md.mesh.dimension==2:
-		if numpy.any(logical_or_n(l1l2flag,stokesflag,pattynflag)):
-			raise TypeError("stokes and pattyn elements not allowed in 2d mesh, extrude it first")
-
-	#Stokes can only be used alone for now:
-	if any(stokesflag) and any(hutterflag):
-		raise TypeError("stokes cannot be used with any other model for now, put stokes everywhere")
+		if numpy.any(logical_or_n(L1L2flag,FSflag,HOflag)):
+			raise TypeError("FS and HO elements not allowed in 2d mesh, extrude it first")
+
+	#FS can only be used alone for now:
+	if any(FSflag) and any(SIAflag):
+		raise TypeError("FS cannot be used with any other model for now, put FS everywhere")
 
 	#Initialize node fields
-	nodeonhutter=numpy.zeros(md.mesh.numberofvertices,bool)
-	nodeonhutter[md.mesh.elements[numpy.nonzero(hutterflag),:]-1]=True
-	nodeonmacayeal=numpy.zeros(md.mesh.numberofvertices,bool)
-	nodeonmacayeal[md.mesh.elements[numpy.nonzero(macayealflag),:]-1]=True
-	nodeonl1l2=numpy.zeros(md.mesh.numberofvertices,bool)
-	nodeonl1l2[md.mesh.elements[numpy.nonzero(l1l2flag),:]-1]=True
-	nodeonpattyn=numpy.zeros(md.mesh.numberofvertices,bool)
-	nodeonpattyn[md.mesh.elements[numpy.nonzero(pattynflag),:]-1]=True
-	nodeonstokes=numpy.zeros(md.mesh.numberofvertices,bool)
+	nodeonSIA=numpy.zeros(md.mesh.numberofvertices,bool)
+	nodeonSIA[md.mesh.elements[numpy.nonzero(SIAflag),:]-1]=True
+	nodeonSSA=numpy.zeros(md.mesh.numberofvertices,bool)
+	nodeonSSA[md.mesh.elements[numpy.nonzero(SSAflag),:]-1]=True
+	nodeonL1L2=numpy.zeros(md.mesh.numberofvertices,bool)
+	nodeonL1L2[md.mesh.elements[numpy.nonzero(L1L2flag),:]-1]=True
+	nodeonHO=numpy.zeros(md.mesh.numberofvertices,bool)
+	nodeonHO[md.mesh.elements[numpy.nonzero(HOflag),:]-1]=True
+	nodeonFS=numpy.zeros(md.mesh.numberofvertices,bool)
 	noneflag=numpy.zeros(md.mesh.numberofelements,bool)
 
-	#First modify stokesflag to get rid of elements contrained everywhere (spc + border with pattyn or macayeal)
-	if any(stokesflag):
-#		fullspcnodes=double((~isnan(md.diagnostic.spcvx)+~isnan(md.diagnostic.spcvy)+~isnan(md.diagnostic.spcvz))==3 | (nodeonpattyn & nodeonstokes));         %find all the nodes on the boundary of the domain without icefront
+	#First modify FSflag to get rid of elements contrained everywhere (spc + border with HO or SSA)
+	if any(FSflag):
+#		fullspcnodes=double((~isnan(md.diagnostic.spcvx)+~isnan(md.diagnostic.spcvy)+~isnan(md.diagnostic.spcvz))==3 | (nodeonHO & nodeonFS));         %find all the nodes on the boundary of the domain without icefront
 		fullspcnodes=numpy.logical_or(numpy.logical_not(numpy.isnan(md.diagnostic.spcvx)).astype(int)+ \
 		                              numpy.logical_not(numpy.isnan(md.diagnostic.spcvy)).astype(int)+ \
 		                              numpy.logical_not(numpy.isnan(md.diagnostic.spcvz)).astype(int)==3, \
-		                              numpy.logical_and(nodeonpattyn,nodeonstokes).reshape(-1,1)).astype(int)    #find all the nodes on the boundary of the domain without icefront
+		                              numpy.logical_and(nodeonHO,nodeonFS).reshape(-1,1)).astype(int)    #find all the nodes on the boundary of the domain without icefront
 #		fullspcelems=double(sum(fullspcnodes(md.mesh.elements),2)==6);         %find all the nodes on the boundary of the domain without icefront
 		fullspcelems=(numpy.sum(fullspcnodes[md.mesh.elements-1],axis=1)==6).astype(int)    #find all the nodes on the boundary of the domain without icefront
-		stokesflag[numpy.nonzero(fullspcelems.reshape(-1))]=False
-		nodeonstokes[md.mesh.elements[numpy.nonzero(stokesflag),:]-1]=True
-
-	#Then complete with NoneApproximation or the other model used if there is no stokes
-	if any(stokesflag): 
-		if   any(pattynflag):    #fill with pattyn
-			pattynflag[numpy.logical_not(stokesflag)]=True
-			nodeonpattyn[md.mesh.elements[numpy.nonzero(pattynflag),:]-1]=True
-		elif any(macayealflag):    #fill with macayeal
-			macayealflag[numpy.logical_not(stokesflag)]=True
-			nodeonmacayeal[md.mesh.elements[numpy.nonzero(macayealflag),:]-1]=True
+		FSflag[numpy.nonzero(fullspcelems.reshape(-1))]=False
+		nodeonFS[md.mesh.elements[numpy.nonzero(FSflag),:]-1]=True
+
+	#Then complete with NoneApproximation or the other model used if there is no FS
+	if any(FSflag): 
+		if   any(HOflag):    #fill with HO
+			HOflag[numpy.logical_not(FSflag)]=True
+			nodeonHO[md.mesh.elements[numpy.nonzero(HOflag),:]-1]=True
+		elif any(SSAflag):    #fill with SSA
+			SSAflag[numpy.logical_not(FSflag)]=True
+			nodeonSSA[md.mesh.elements[numpy.nonzero(SSAflag),:]-1]=True
 		else:    #fill with none 
-			noneflag[numpy.nonzero(numpy.logical_not(stokesflag))]=True
-
-	#Now take care of the coupling between MacAyeal and Pattyn
+			noneflag[numpy.nonzero(numpy.logical_not(FSflag))]=True
+
+	#Now take care of the coupling between MacAyeal and HO
 	md.diagnostic.vertex_pairing=numpy.array([])
-	nodeonmacayealpattyn=numpy.zeros(md.mesh.numberofvertices,bool)
-	nodeonpattynstokes=numpy.zeros(md.mesh.numberofvertices,bool)
-	nodeonmacayealstokes=numpy.zeros(md.mesh.numberofvertices,bool)
-	macayealpattynflag=numpy.zeros(md.mesh.numberofelements,bool)
-	macayealstokesflag=numpy.zeros(md.mesh.numberofelements,bool)
-	pattynstokesflag=numpy.zeros(md.mesh.numberofelements,bool)
+	nodeonSSAHO=numpy.zeros(md.mesh.numberofvertices,bool)
+	nodeonHOFS=numpy.zeros(md.mesh.numberofvertices,bool)
+	nodeonSSAFS=numpy.zeros(md.mesh.numberofvertices,bool)
+	SSAHOflag=numpy.zeros(md.mesh.numberofelements,bool)
+	SSAFSflag=numpy.zeros(md.mesh.numberofelements,bool)
+	HOFSflag=numpy.zeros(md.mesh.numberofelements,bool)
 	if   strcmpi(coupling_method,'penalties'):
-		#Create the border nodes between Pattyn and MacAyeal and extrude them
+		#Create the border nodes between HO and MacAyeal and extrude them
 		numnodes2d=md.mesh.numberofvertices2d
 		numlayers=md.mesh.numberoflayers
-		bordernodes2d=numpy.nonzero(numpy.logical_and(nodeonpattyn[0:numnodes2d],nodeonmacayeal[0:numnodes2d]))[0]+1    #Nodes connected to two different types of elements
+		bordernodes2d=numpy.nonzero(numpy.logical_and(nodeonHO[0:numnodes2d],nodeonSSA[0:numnodes2d]))[0]+1    #Nodes connected to two different types of elements
 
 		#initialize and fill in penalties structure
@@ -134,158 +134,158 @@
 
 	elif strcmpi(coupling_method,'tiling'):
-		if   any(macayealflag) and any(pattynflag):    #coupling macayeal pattyn
+		if   any(SSAflag) and any(HOflag):    #coupling SSA HO
 			#Find node at the border
-			nodeonmacayealpattyn[numpy.nonzero(numpy.logical_and(nodeonmacayeal,nodeonpattyn))]=True
-			#Macayeal elements in contact with this layer become MacAyealPattyn elements
-			matrixelements=ismember(md.mesh.elements-1,numpy.nonzero(nodeonmacayealpattyn)[0])
+			nodeonSSAHO[numpy.nonzero(numpy.logical_and(nodeonSSA,nodeonHO))]=True
+			#SSA elements in contact with this layer become MacAyealHO elements
+			matrixelements=ismember(md.mesh.elements-1,numpy.nonzero(nodeonSSAHO)[0])
 			commonelements=numpy.sum(matrixelements,axis=1)!=0
-			commonelements[numpy.nonzero(pattynflag)]=False    #only one layer: the elements previously in macayeal
-			macayealflag[numpy.nonzero(commonelements)]=False    #these elements are now macayealpattynelements
-			macayealpattynflag[numpy.nonzero(commonelements)]=True
-			nodeonmacayeal[:]=False
-			nodeonmacayeal[md.mesh.elements[numpy.nonzero(macayealflag),:]-1]=True
+			commonelements[numpy.nonzero(HOflag)]=False    #only one layer: the elements previously in SSA
+			SSAflag[numpy.nonzero(commonelements)]=False    #these elements are now SSAHOelements
+			SSAHOflag[numpy.nonzero(commonelements)]=True
+			nodeonSSA[:]=False
+			nodeonSSA[md.mesh.elements[numpy.nonzero(SSAflag),:]-1]=True
 
 			#rule out elements that don't touch the 2 boundaries
-			pos=numpy.nonzero(macayealpattynflag)[0]
+			pos=numpy.nonzero(SSAHOflag)[0]
 			elist=numpy.zeros(numpy.size(pos),dtype=int)
-			elist = elist + numpy.sum(nodeonmacayeal[md.mesh.elements[pos,:]-1],axis=1).astype(bool)
-			elist = elist - numpy.sum(nodeonpattyn[md.mesh.elements[pos,:]-1]  ,axis=1).astype(bool)
+			elist = elist + numpy.sum(nodeonSSA[md.mesh.elements[pos,:]-1],axis=1).astype(bool)
+			elist = elist - numpy.sum(nodeonHO[md.mesh.elements[pos,:]-1]  ,axis=1).astype(bool)
 			pos1=numpy.nonzero(elist==1)[0]
-			macayealflag[pos[pos1]]=True
-			macayealpattynflag[pos[pos1]]=False
+			SSAflag[pos[pos1]]=True
+			SSAHOflag[pos[pos1]]=False
 			pos2=numpy.nonzero(elist==-1)[0]
-			pattynflag[pos[pos2]]=True
-			macayealpattynflag[pos[pos2]]=False
+			HOflag[pos[pos2]]=True
+			SSAHOflag[pos[pos2]]=False
 
 			#Recompute nodes associated to these elements
-			nodeonmacayeal[:]=False
-			nodeonmacayeal[md.mesh.elements[numpy.nonzero(macayealflag),:]-1]=True
-			nodeonpattyn[:]=False
-			nodeonpattyn[md.mesh.elements[numpy.nonzero(pattynflag),:]-1]=True
-			nodeonmacayealpattyn[:]=False
-			nodeonmacayealpattyn[md.mesh.elements[numpy.nonzero(macayealpattynflag),:]-1]=True
-
-		elif any(pattynflag) and any(stokesflag):    #coupling pattyn stokes
+			nodeonSSA[:]=False
+			nodeonSSA[md.mesh.elements[numpy.nonzero(SSAflag),:]-1]=True
+			nodeonHO[:]=False
+			nodeonHO[md.mesh.elements[numpy.nonzero(HOflag),:]-1]=True
+			nodeonSSAHO[:]=False
+			nodeonSSAHO[md.mesh.elements[numpy.nonzero(SSAHOflag),:]-1]=True
+
+		elif any(HOflag) and any(FSflag):    #coupling HO FS
 			#Find node at the border
-			nodeonpattynstokes[numpy.nonzero(numpy.logical_and(nodeonpattyn,nodeonstokes))]=True
-			#Stokes elements in contact with this layer become PattynStokes elements
-			matrixelements=ismember(md.mesh.elements-1,numpy.nonzero(nodeonpattynstokes)[0])
+			nodeonHOFS[numpy.nonzero(numpy.logical_and(nodeonHO,nodeonFS))]=True
+			#FS elements in contact with this layer become HOFS elements
+			matrixelements=ismember(md.mesh.elements-1,numpy.nonzero(nodeonHOFS)[0])
 			commonelements=numpy.sum(matrixelements,axis=1)!=0
-			commonelements[numpy.nonzero(pattynflag)]=False    #only one layer: the elements previously in macayeal
-			stokesflag[numpy.nonzero(commonelements)]=False    #these elements are now macayealpattynelements
-			pattynstokesflag[numpy.nonzero(commonelements)]=True
-			nodeonstokes=numpy.zeros(md.mesh.numberofvertices,bool)
-			nodeonstokes[md.mesh.elements[numpy.nonzero(stokesflag),:]-1]=True
+			commonelements[numpy.nonzero(HOflag)]=False    #only one layer: the elements previously in SSA
+			FSflag[numpy.nonzero(commonelements)]=False    #these elements are now SSAHOelements
+			HOFSflag[numpy.nonzero(commonelements)]=True
+			nodeonFS=numpy.zeros(md.mesh.numberofvertices,bool)
+			nodeonFS[md.mesh.elements[numpy.nonzero(FSflag),:]-1]=True
 
 			#rule out elements that don't touch the 2 boundaries
-			pos=numpy.nonzero(pattynstokesflag)[0]
+			pos=numpy.nonzero(HOFSflag)[0]
 			elist=numpy.zeros(numpy.size(pos),dtype=int)
-			elist = elist + numpy.sum(nodeonstokes[md.mesh.elements[pos,:]-1],axis=1).astype(bool)
-			elist = elist - numpy.sum(nodeonpattyn[md.mesh.elements[pos,:]-1],axis=1).astype(bool)
+			elist = elist + numpy.sum(nodeonFS[md.mesh.elements[pos,:]-1],axis=1).astype(bool)
+			elist = elist - numpy.sum(nodeonHO[md.mesh.elements[pos,:]-1],axis=1).astype(bool)
 			pos1=numpy.nonzero(elist==1)[0]
-			stokesflag[pos[pos1]]=True
-			pattynstokesflag[pos[pos1]]=False
+			FSflag[pos[pos1]]=True
+			HOFSflag[pos[pos1]]=False
 			pos2=numpy.nonzero(elist==-1)[0]
-			pattynflag[pos[pos2]]=True
-			pattynstokesflag[pos[pos2]]=False
+			HOflag[pos[pos2]]=True
+			HOFSflag[pos[pos2]]=False
 
 			#Recompute nodes associated to these elements
-			nodeonstokes[:]=False
-			nodeonstokes[md.mesh.elements[numpy.nonzero(stokesflag),:]-1]=True
-			nodeonpattyn[:]=False
-			nodeonpattyn[md.mesh.elements[numpy.nonzero(pattynflag),:]-1]=True
-			nodeonpattynstokes[:]=False
-			nodeonpattynstokes[md.mesh.elements[numpy.nonzero(pattynstokesflag),:]-1]=True
-
-		elif any(stokesflag) and any(macayealflag):
+			nodeonFS[:]=False
+			nodeonFS[md.mesh.elements[numpy.nonzero(FSflag),:]-1]=True
+			nodeonHO[:]=False
+			nodeonHO[md.mesh.elements[numpy.nonzero(HOflag),:]-1]=True
+			nodeonHOFS[:]=False
+			nodeonHOFS[md.mesh.elements[numpy.nonzero(HOFSflag),:]-1]=True
+
+		elif any(FSflag) and any(SSAflag):
 			#Find node at the border
-			nodeonmacayealstokes[numpy.nonzero(numpy.logical_and(nodeonmacayeal,nodeonstokes))]=True
-			#Stokes elements in contact with this layer become MacAyealStokes elements
-			matrixelements=ismember(md.mesh.elements-1,numpy.nonzero(nodeonmacayealstokes)[0])
+			nodeonSSAFS[numpy.nonzero(numpy.logical_and(nodeonSSA,nodeonFS))]=True
+			#FS elements in contact with this layer become MacAyealFS elements
+			matrixelements=ismember(md.mesh.elements-1,numpy.nonzero(nodeonSSAFS)[0])
 			commonelements=numpy.sum(matrixelements,axis=1)!=0
-			commonelements[numpy.nonzero(macayealflag)]=False    #only one layer: the elements previously in macayeal
-			stokesflag[numpy.nonzero(commonelements)]=False    #these elements are now macayealmacayealelements
-			macayealstokesflag[numpy.nonzero(commonelements)]=True
-			nodeonstokes=numpy.zeros(md.mesh.numberofvertices,bool)
-			nodeonstokes[md.mesh.elements[numpy.nonzero(stokesflag),:]-1]=True
+			commonelements[numpy.nonzero(SSAflag)]=False    #only one layer: the elements previously in SSA
+			FSflag[numpy.nonzero(commonelements)]=False    #these elements are now SSASSAelements
+			SSAFSflag[numpy.nonzero(commonelements)]=True
+			nodeonFS=numpy.zeros(md.mesh.numberofvertices,bool)
+			nodeonFS[md.mesh.elements[numpy.nonzero(FSflag),:]-1]=True
 
 			#rule out elements that don't touch the 2 boundaries
-			pos=numpy.nonzero(macayealstokesflag)[0]
+			pos=numpy.nonzero(SSAFSflag)[0]
 			elist=numpy.zeros(numpy.size(pos),dtype=int)
-			elist = elist + numpy.sum(nodeonmacayeal[md.mesh.elements[pos,:]-1],axis=1).astype(bool)
-			elist = elist - numpy.sum(nodeonstokes[md.mesh.elements[pos,:]-1]  ,axis=1).astype(bool)
+			elist = elist + numpy.sum(nodeonSSA[md.mesh.elements[pos,:]-1],axis=1).astype(bool)
+			elist = elist - numpy.sum(nodeonFS[md.mesh.elements[pos,:]-1]  ,axis=1).astype(bool)
 			pos1=numpy.nonzero(elist==1)[0]
-			macayealflag[pos[pos1]]=True
-			macayealstokesflag[pos[pos1]]=False
+			SSAflag[pos[pos1]]=True
+			SSAFSflag[pos[pos1]]=False
 			pos2=numpy.nonzero(elist==-1)[0]
-			stokesflag[pos[pos2]]=True
-			macayealstokesflag[pos[pos2]]=False
+			FSflag[pos[pos2]]=True
+			SSAFSflag[pos[pos2]]=False
 
 			#Recompute nodes associated to these elements
-			nodeonmacayeal[:]=False
-			nodeonmacayeal[md.mesh.elements[numpy.nonzero(macayealflag),:]-1]=True
-			nodeonstokes[:]=False
-			nodeonstokes[md.mesh.elements[numpy.nonzero(stokesflag),:]-1]=True
-			nodeonmacayealstokes[:]=False
-			nodeonmacayealstokes[md.mesh.elements[numpy.nonzero(macayealstokesflag),:]-1]=True
-
-		elif any(stokesflag) and any(hutterflag):
+			nodeonSSA[:]=False
+			nodeonSSA[md.mesh.elements[numpy.nonzero(SSAflag),:]-1]=True
+			nodeonFS[:]=False
+			nodeonFS[md.mesh.elements[numpy.nonzero(FSflag),:]-1]=True
+			nodeonSSAFS[:]=False
+			nodeonSSAFS[md.mesh.elements[numpy.nonzero(SSAFSflag),:]-1]=True
+
+		elif any(FSflag) and any(SIAflag):
 			raise TypeError("type of coupling not supported yet")
 
-	#Create MacAyealPattynApproximation where needed
+	#Create MacAyealHOApproximation where needed
 	md.flowequation.element_equation=numpy.zeros(md.mesh.numberofelements,int)
 	md.flowequation.element_equation[numpy.nonzero(noneflag)]=0
-	md.flowequation.element_equation[numpy.nonzero(hutterflag)]=1
-	md.flowequation.element_equation[numpy.nonzero(macayealflag)]=2
-	md.flowequation.element_equation[numpy.nonzero(l1l2flag)]=8
-	md.flowequation.element_equation[numpy.nonzero(pattynflag)]=3
-	md.flowequation.element_equation[numpy.nonzero(stokesflag)]=4
-	md.flowequation.element_equation[numpy.nonzero(macayealpattynflag)]=5
-	md.flowequation.element_equation[numpy.nonzero(macayealstokesflag)]=6
-	md.flowequation.element_equation[numpy.nonzero(pattynstokesflag)]=7
+	md.flowequation.element_equation[numpy.nonzero(SIAflag)]=1
+	md.flowequation.element_equation[numpy.nonzero(SSAflag)]=2
+	md.flowequation.element_equation[numpy.nonzero(L1L2flag)]=8
+	md.flowequation.element_equation[numpy.nonzero(HOflag)]=3
+	md.flowequation.element_equation[numpy.nonzero(FSflag)]=4
+	md.flowequation.element_equation[numpy.nonzero(SSAHOflag)]=5
+	md.flowequation.element_equation[numpy.nonzero(SSAFSflag)]=6
+	md.flowequation.element_equation[numpy.nonzero(HOFSflag)]=7
 
 	#border
-	md.flowequation.borderpattyn=nodeonpattyn
-	md.flowequation.bordermacayeal=nodeonmacayeal
-	md.flowequation.borderstokes=nodeonstokes
+	md.flowequation.borderHO=nodeonHO
+	md.flowequation.borderSSA=nodeonSSA
+	md.flowequation.borderFS=nodeonFS
 
 	#Create vertices_type
 	md.flowequation.vertex_equation=numpy.zeros(md.mesh.numberofvertices,int)
-	pos=numpy.nonzero(nodeonmacayeal)
+	pos=numpy.nonzero(nodeonSSA)
 	md.flowequation.vertex_equation[pos]=2
-	pos=numpy.nonzero(nodeonl1l2)
+	pos=numpy.nonzero(nodeonL1L2)
 	md.flowequation.vertex_equation[pos]=8
-	pos=numpy.nonzero(nodeonpattyn)
+	pos=numpy.nonzero(nodeonHO)
 	md.flowequation.vertex_equation[pos]=3
-	pos=numpy.nonzero(nodeonhutter)
+	pos=numpy.nonzero(nodeonSIA)
 	md.flowequation.vertex_equation[pos]=1
-	pos=numpy.nonzero(nodeonmacayealpattyn)
+	pos=numpy.nonzero(nodeonSSAHO)
 	md.flowequation.vertex_equation[pos]=5
-	pos=numpy.nonzero(nodeonstokes)
+	pos=numpy.nonzero(nodeonFS)
 	md.flowequation.vertex_equation[pos]=4
-	if any(stokesflag):
-		pos=numpy.nonzero(numpy.logical_not(nodeonstokes))
-		if not (any(pattynflag) or any(macayealflag)):
+	if any(FSflag):
+		pos=numpy.nonzero(numpy.logical_not(nodeonFS))
+		if not (any(HOflag) or any(SSAflag)):
 			md.flowequation.vertex_equation[pos]=0
-	pos=numpy.nonzero(nodeonpattynstokes)
+	pos=numpy.nonzero(nodeonHOFS)
 	md.flowequation.vertex_equation[pos]=7
-	pos=numpy.nonzero(nodeonmacayealstokes)
+	pos=numpy.nonzero(nodeonSSAFS)
 	md.flowequation.vertex_equation[pos]=6
 
 	#figure out solution types
-	md.flowequation.ishutter=any(md.flowequation.element_equation==1)
-	md.flowequation.ismacayeal=any(md.flowequation.element_equation==2)
-	md.flowequation.isl1l2=any(md.flowequation.element_equation==8)
-	md.flowequation.ispattyn=any(md.flowequation.element_equation==3)
-	md.flowequation.isstokes=any(md.flowequation.element_equation==4)
+	md.flowequation.isSIA=any(md.flowequation.element_equation==1)
+	md.flowequation.isSSA=any(md.flowequation.element_equation==2)
+	md.flowequation.isL1L2=any(md.flowequation.element_equation==8)
+	md.flowequation.isHO=any(md.flowequation.element_equation==3)
+	md.flowequation.isFS=any(md.flowequation.element_equation==4)
 
 	return md
 
 	#Check that tiling can work:
-	if any(md.flowequation.bordermacayeal) and any(md.flowequation.borderpattyn) and any(md.flowequation.borderpattyn + md.flowequation.bordermacayeal !=1):
+	if any(md.flowequation.borderSSA) and any(md.flowequation.borderHO) and any(md.flowequation.borderHO + md.flowequation.borderSSA !=1):
 		raise TypeError("error coupling domain too irregular")
-	if any(md.flowequation.bordermacayeal) and any(md.flowequation.borderstokes) and any(md.flowequation.borderstokes + md.flowequation.bordermacayeal !=1):
+	if any(md.flowequation.borderSSA) and any(md.flowequation.borderFS) and any(md.flowequation.borderFS + md.flowequation.borderSSA !=1):
 		raise TypeError("error coupling domain too irregular")
-	if any(md.flowequation.borderstokes) and any(md.flowequation.borderpattyn) and any(md.flowequation.borderpattyn + md.flowequation.borderstokes !=1):
+	if any(md.flowequation.borderFS) and any(md.flowequation.borderHO) and any(md.flowequation.borderHO + md.flowequation.borderFS !=1):
 		raise TypeError("error coupling domain too irregular")
 
Index: issm/trunk-jpl/src/m/plot/plot_elementstype.m
===================================================================
--- issm/trunk-jpl/src/m/plot/plot_elementstype.m	(revision 15563)
+++ issm/trunk-jpl/src/m/plot/plot_elementstype.m	(revision 15564)
@@ -18,5 +18,5 @@
 
 if is2d
-	%Hutter elements
+	%SIA elements
 	posH=find(data==1);
 	A=elements(posH,1); B=elements(posH,2); C=elements(posH,3); 
@@ -26,21 +26,21 @@
 	A=elements(posM,1); B=elements(posM,2); C=elements(posM,3); 
 	p2=patch( 'Faces', [A B C], 'Vertices', [x y z],'CData',2,'FaceColor','flat','EdgeColor',edgecolor);
-	%Pattyn element
+	%HO element
 	posP=find(data==3);
 	A=elements(posP,1); B=elements(posP,2); C=elements(posP,3); 
 	p3=patch( 'Faces', [A B C], 'Vertices', [x y z],'CData',3,'FaceColor','flat','EdgeColor',edgecolor);
-	%MacAyealPattyn element
+	%MacAyealHO element
 	posMP=find(data==5);
 	A=elements(posMP,1); B=elements(posMP,2); C=elements(posMP,3); 
 	p5=patch( 'Faces', [A B C], 'Vertices', [x y z],'CData',5,'FaceColor','flat','EdgeColor',edgecolor);
-	%Stokes elements
+	%FS elements
 	posS=find(data==4);
 	A=elements(posS,1); B=elements(posS,2); C=elements(posS,3); 
 	p6=patch( 'Faces', [A B C], 'Vertices', [x y z],'CData',4,'FaceColor','flat','EdgeColor',edgecolor);
-	%MacAyealStokes elements
+	%MacAyealFS elements
 	posMS=find(data==6);
 	A=elements(posMS,1); B=elements(posMS,2); C=elements(posMS,3); 
 	p7=patch( 'Faces', [A B C], 'Vertices', [x y z],'CData',6,'FaceColor','flat','EdgeColor',edgecolor);
-	%PattynStokes elements
+	%HOFS elements
 	posPS=find(data==7);
 	A=elements(posPS,1); B=elements(posPS,2); C=elements(posPS,3); 
@@ -52,9 +52,9 @@
 
 	legend([p1 p2 p3 p5 p6 p7 p8 p9],...
-		'Hutter''s elements','MacAyeal''s elements','Pattyn''s elements',...
-		'MacAyealPattyn''s elements','Stokes''s elements','MacAyealStokes''s elements','PattynStokes''s elements','None element');
+		'SIA''s elements','MacAyeal''s elements','HO''s elements',...
+		'MacAyealHO''s elements','FS''s elements','MacAyealFS''s elements','HOFS''s elements','None element');
 
 else
-	%Hutter elements
+	%SIA elements
 	posH=find(data==1);
 	A=elements(posH,1); B=elements(posH,2); C=elements(posH,3); D=elements(posH,4); E=elements(posH,5); F=elements(posH,6);
@@ -72,5 +72,5 @@
 	patch( 'Faces', [B E F C],'Vertices', [x y z],'CData', 2,'FaceColor','flat','EdgeColor',edgecolor);
 	patch( 'Faces', [C A D F],'Vertices', [x y z],'CData', 2,'FaceColor','flat','EdgeColor',edgecolor);
-	%Pattyn elements
+	%HO elements
 	posP=find(data==3);
 	A=elements(posP,1); B=elements(posP,2); C=elements(posP,3); D=elements(posP,4); E=elements(posP,5); F=elements(posP,6);
@@ -80,5 +80,5 @@
 	patch( 'Faces', [B E F C],'Vertices', [x y z],'CData', 3,'FaceColor','flat','EdgeColor',edgecolor);
 	patch( 'Faces', [C A D F],'Vertices', [x y z],'CData', 3,'FaceColor','flat','EdgeColor',edgecolor);
-	%Stokes elements
+	%FS elements
 	posS=find(data==4);
 	A=elements(posS,1); B=elements(posS,2); C=elements(posS,3); D=elements(posS,4); E=elements(posS,5); F=elements(posS,6);
@@ -88,5 +88,5 @@
 	patch( 'Faces', [B E F C],'Vertices', [x y z],'CData', 4,'FaceColor','flat','EdgeColor',edgecolor);
 	patch( 'Faces', [C A D F],'Vertices', [x y z],'CData', 4,'FaceColor','flat','EdgeColor',edgecolor);
-	%MacAyealPattyn elements
+	%MacAyealHO elements
 	posP=find(data==5);
 	A=elements(posP,1); B=elements(posP,2); C=elements(posP,3); D=elements(posP,4); E=elements(posP,5); F=elements(posP,6);
@@ -96,5 +96,5 @@
 	patch( 'Faces', [B E F C],'Vertices', [x y z],'CData', 5,'FaceColor','flat','EdgeColor',edgecolor);
 	patch( 'Faces', [C A D F],'Vertices', [x y z],'CData', 5,'FaceColor','flat','EdgeColor',edgecolor);
-	%PattynStokes elements
+	%HOFS elements
 	PosPS=find(data==7);
 	A=elements(PosPS,1); B=elements(PosPS,2); C=elements(PosPS,3); D=elements(PosPS,4); E=elements(PosPS,5); F=elements(PosPS,6);
@@ -104,5 +104,5 @@
 	patch( 'Faces', [B E F C],'Vertices', [x y z],'CData', 7,'FaceColor','flat','EdgeColor',edgecolor);
 	patch( 'Faces', [C A D F],'Vertices', [x y z],'CData', 7,'FaceColor','flat','EdgeColor',edgecolor);
-	%MacAyealStokes elements
+	%MacAyealFS elements
 	PosMS=find(data==6);
 	A=elements(PosMS,1); B=elements(PosMS,2); C=elements(PosMS,3); D=elements(PosMS,4); E=elements(PosMS,5); F=elements(PosMS,6);
@@ -122,6 +122,6 @@
 
 	legend([p1 p2 p3 p4 p5 p6 p7 p8],...
-		'Hutter''s elements','MacAyeal''s elements','Pattyn''s elements','Stokes''s elements',...
-		'MacAyealPattyn''s elements','PattynStokes''s elements','MacAyealStokes''s elements','None elements');
+		'SIA''s elements','MacAyeal''s elements','HO''s elements','FS''s elements',...
+		'MacAyealHO''s elements','HOFS''s elements','MacAyealFS''s elements','None elements');
 end
 
Index: issm/trunk-jpl/src/m/plot/plot_penalties.m
===================================================================
--- issm/trunk-jpl/src/m/plot/plot_penalties.m	(revision 15563)
+++ issm/trunk-jpl/src/m/plot/plot_penalties.m	(revision 15564)
@@ -40,5 +40,5 @@
 		P2=plot3(x(md.penalties(i,:)),y(md.penalties(i,:)),z(md.penalties(i,:)),'bo-','LineWidth',2,'MarkerSize',8,'MarkerFaceColor','b');
 	end
-	legend([P1 P2],'MacAyeal''s penalized nodes','Pattyn''s penalized nodes');
+	legend([P1 P2],'MacAyeal''s penalized nodes','HO''s penalized nodes');
 end
 
Index: issm/trunk-jpl/src/m/qmu/qmuresponse.m
===================================================================
--- issm/trunk-jpl/src/m/qmu/qmuresponse.m	(revision 15563)
+++ issm/trunk-jpl/src/m/qmu/qmuresponse.m	(revision 15564)
@@ -28,9 +28,9 @@
 	m_dhu=models.dhu;
 	m_ds=models.ds;
-	ishutter=m_dhu.parameters.ishutter;
-	ismacayeal=m_dh.parameters.ismacayeal;
-	ispattyn=m_dh.parameters.ispattyn;
-	isstokes=m_ds.parameters.isstokes;
-	if ishutter,
+	isSIA=m_dhu.parameters.isSIA;
+	isSSA=m_dh.parameters.isSSA;
+	isHO=m_dh.parameters.isHO;
+	isFS=m_ds.parameters.isFS;
+	if isSIA,
 
 % for now, separate all segments from double array for parallel to make cells
@@ -58,5 +58,5 @@
 		end
 
-	elseif ismacayeal || ispattyn,
+	elseif isSSA || isHO,
 
 % for now, separate all segments from double array for parallel to make cells
@@ -84,5 +84,5 @@
 		end
 
-	elseif isstokes,
+	elseif isFS,
 
 % for now, separate all segments from double array for parallel to make cells
Index: issm/trunk-jpl/src/m/solvers/stokesoptions.m
===================================================================
--- issm/trunk-jpl/src/m/solvers/stokesoptions.m	(revision 15563)
+++ issm/trunk-jpl/src/m/solvers/stokesoptions.m	(revision 15564)
@@ -1,29 +1,29 @@
-function stokes=stokesoptions(varargin)
+function FS=FSoptions(varargin)
 %STOKESOPTIONS - return STOKES multi-physics solver petsc options
 %
 %   Usage:
-%      options=stokesoptions;
+%      options=FSoptions;
 
 %retrieve options provided in varargin
 options=pairoptions(varargin{:});
-stokes=struct();
+FS=struct();
 
-%default stokes options
+%default FS options
 PETSC_VERSION=petscversion();
 if PETSC_VERSION==2,
-	error('stokesoptions error message: multi-physics options not supported in Petsc 2');
+	error('FSoptions error message: multi-physics options not supported in Petsc 2');
 end
 if PETSC_VERSION==3,
-	stokes.toolkit='petsc';
-	stokes.mat_type=getfieldvalue(options,'mat_type','mpiaij');
-	stokes.ksp_max_it=getfieldvalue(options,'ksp_max_it',1000);
-	stokes.ksp_type=getfieldvalue(options,'ksp_type','gmres');
-	stokes.pc_type=getfieldvalue(options,'pc_type','fieldsplit');
-	stokes.pc_field_split_type=getfieldvalue(options,'pc_field_split_type','schur');
-	stokes.fieldsplit_0_pc_type=getfieldvalue(options,'fieldsplit_0_pc_type','hypre');
-	stokes.fieldsplit_0_ksp_type=getfieldvalue(options,'fieldsplit_0_ksp_type','gmres');
-	stokes.fieldsplit_0_pc_hypre_type=getfieldvalue(options,'fieldsplit_0_pc_hypre_type','boomerang');
-	stokes.fieldsplit_1_pc_type=getfieldvalue(options,'fieldsplit_1_pc_type','jacobi');
-	stokes.fieldsplit_1_ksp_type=getfieldvalue(options,'fieldsplit_1_ksp_type','preonly');
-	stokes.issm_option_solver=getfieldvalue(options,'issm_option_solver','stokes');
+	FS.toolkit='petsc';
+	FS.mat_type=getfieldvalue(options,'mat_type','mpiaij');
+	FS.ksp_max_it=getfieldvalue(options,'ksp_max_it',1000);
+	FS.ksp_type=getfieldvalue(options,'ksp_type','gmres');
+	FS.pc_type=getfieldvalue(options,'pc_type','fieldsplit');
+	FS.pc_field_split_type=getfieldvalue(options,'pc_field_split_type','schur');
+	FS.fieldsplit_0_pc_type=getfieldvalue(options,'fieldsplit_0_pc_type','hypre');
+	FS.fieldsplit_0_ksp_type=getfieldvalue(options,'fieldsplit_0_ksp_type','gmres');
+	FS.fieldsplit_0_pc_hypre_type=getfieldvalue(options,'fieldsplit_0_pc_hypre_type','boomerang');
+	FS.fieldsplit_1_pc_type=getfieldvalue(options,'fieldsplit_1_pc_type','jacobi');
+	FS.fieldsplit_1_ksp_type=getfieldvalue(options,'fieldsplit_1_ksp_type','preonly');
+	FS.issm_option_solver=getfieldvalue(options,'issm_option_solver','FS');
 end
Index: issm/trunk-jpl/src/m/solvers/stokesoptions.py
===================================================================
--- issm/trunk-jpl/src/m/solvers/stokesoptions.py	(revision 15563)
+++ issm/trunk-jpl/src/m/solvers/stokesoptions.py	(revision 15564)
@@ -3,9 +3,9 @@
 from petscversion  import *
 #}}}
-def stokesoptions(*args):
+def FSoptions(*args):
 	#STOKESOPTIONS - return STOKES multi-physics solver petsc options
 	#
 	#   Usage:
-	#      options=stokesoptions;
+	#      options=FSoptions;
 	
 	#retrieve options provided in varargin
@@ -13,13 +13,13 @@
 
 
-	#default stokes options
+	#default FS options
 	PETSC_VERSION=petscversion()
 
 	if PETSC_VERSION==2:
-		raise RuntimeError('stokesoptions error message: multi-physics options not supported in Petsc 2')
+		raise RuntimeError('FSoptions error message: multi-physics options not supported in Petsc 2')
 	if PETSC_VERSION==3:
 		options=[['toolkit','petsc'],['mat_type','mpiaij'],['ksp_max_it',1000],['ksp_type','gmres'],['pc_type','fieldsplit'],['pc_field_split_type','schur'],\
 	['fieldsplit_0_pc_type','hypre'],['fieldsplit_0_ksp_type','gmres'],['fieldsplit_0_pc_hypre_type','boomerang'],\
-	['fieldsplit_1_pc_type','jacobi'],['fieldsplit_1_ksp_type','preonly'],['issm_option_solver','stokes']]
+	['fieldsplit_1_pc_type','jacobi'],['fieldsplit_1_ksp_type','preonly'],['issm_option_solver','FS']]
 
 	#now, go through our arguments, and write over default options.
