Index: /issm/trunk-jpl/m4/analyses.m4
===================================================================
--- /issm/trunk-jpl/m4/analyses.m4	(revision 27461)
+++ /issm/trunk-jpl/m4/analyses.m4	(revision 27462)
@@ -374,4 +374,18 @@
 AC_MSG_RESULT($HAVE_HYDROLOGYSHREVE)
 dnl }}}
+dnl with-HydrologyArmapw{{{
+AC_ARG_WITH([HydrologyArmapw],
+	AS_HELP_STRING([--with-HydrologyArmapw = YES], [compile with HydrologyArmapw capabilities (default is yes)]),
+	[HYDROLOGYARMAPW=$withval],[HYDROLOGYARMAPW=yes])
+AC_MSG_CHECKING(for HydrologyArmapw capability compilation)
+
+HAVE_HYDROLOGYARMAPW=no 
+if test "x$HYDROLOGYARMAPW" = "xyes"; then
+	HAVE_HYDROLOGYARMAPW=yes
+	AC_DEFINE([_HAVE_HYDROLOGYARMAPW_],[1],[with HydrologyArmapw capability])
+fi
+AM_CONDITIONAL([HYDROLOGYARMAPW], [test x$HAVE_HYDROLOGYARMAPW = xyes])
+AC_MSG_RESULT($HAVE_HYDROLOGYARMAPW)
+dnl }}}
 dnl with-L2ProjectionBase{{{
 AC_ARG_WITH([L2ProjectionBase],
Index: /issm/trunk-jpl/src/c/Makefile.am
===================================================================
--- /issm/trunk-jpl/src/c/Makefile.am	(revision 27461)
+++ /issm/trunk-jpl/src/c/Makefile.am	(revision 27462)
@@ -487,4 +487,7 @@
 issm_sources += ./analyses/HydrologyDCEfficientAnalysis.cpp
 endif
+if HYDROLOGYARMAPW
+issm_sources += ./analyses/HydrologyArmapwAnalysis.cpp
+endif
 if L2PROJECTIONEPL
 issm_sources += ./analyses/L2ProjectionEPLAnalysis.cpp
Index: /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.cpp	(revision 27461)
+++ /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.cpp	(revision 27462)
@@ -74,4 +74,7 @@
 		case GLheightadvectionAnalysisEnum : return new GLheightadvectionAnalysis();
 		#endif
+		#ifdef _HAVE_HYDROLOGYARMAPW_
+		case HydrologyArmapwAnalysisEnum : return new HydrologyArmapwAnalysis();
+		#endif
 		#ifdef _HAVE_HYDROLOGYDCEFFICIENT_
 		case HydrologyDCEfficientAnalysisEnum : return new HydrologyDCEfficientAnalysis();
Index: /issm/trunk-jpl/src/c/analyses/analyses.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/analyses.h	(revision 27461)
+++ /issm/trunk-jpl/src/c/analyses/analyses.h	(revision 27462)
@@ -28,4 +28,5 @@
 #include "./LoveAnalysis.h"
 #include "./EsaAnalysis.h"
+#include "./HydrologyArmapwAnalysis.h"
 #include "./HydrologyDCEfficientAnalysis.h"
 #include "./HydrologyDCInefficientAnalysis.h"
Index: /issm/trunk-jpl/src/c/classes/Elements/Element.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 27461)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 27462)
@@ -105,4 +105,11 @@
          noiseenum_type = SubglacialdischargeARMANoiseEnum;
          outenum_type   = FrontalForcingsSubglacialDischargeEnum;
+         break;
+		case(HydrologyarmapwEnum):
+         arenum_type    = WaterPressureValuesAutoregressionEnum;
+         maenum_type    = WaterPressureValuesMovingaverageEnum;
+         basinenum_type = HydrologyBasinsIdEnum;
+         noiseenum_type = FrictionWaterPressureNoiseEnum;
+         outenum_type   = WaterPressureArmaPerturbationEnum;
          break;
 	}
@@ -2733,4 +2740,5 @@
 	
 	/*Variable declaration*/
+	bool ratevariable;
    const int numvertices = this->GetNumberOfVertices();
 	int basinid,mindex,mindexnext,basinenum_type,varenum_type,indperiod;
@@ -2749,5 +2757,11 @@
          basinenum_type = FrontalForcingsBasinIdEnum;
          varenum_type   = FrontalForcingsSubglacialDischargeEnum;
-         break;
+         ratevariable   = true;
+			break;
+		case(HydrologyarmapwEnum):
+         basinenum_type = HydrologyBasinsIdEnum;
+         varenum_type   = FrictionWaterPressureEnum;
+         ratevariable   = false;
+			break;
 	}
 	
@@ -2787,10 +2801,13 @@
 	for(int v=0;v<numvertices;v++){
 		for(int i=0;i<12;i++){
-			rateinmonth[v*12+i] = varlistinput[v]*monthlyfac_b[i]*12;
-			varlist[v]          = varlist[v]+fracdtinmonth[i]*rateinmonth[v*12+i];
+			if(ratevariable){
+				rateinmonth[v*12+i] = varlistinput[v]*monthlyfac_b[i]*12;
+				varlist[v]          = varlist[v]+fracdtinmonth[i]*rateinmonth[v*12+i];
+			}
+			else varlist[v]       = varlist[v]+fracdtinmonth[i]*monthlyfac_b[i]*varlistinput[v];
 		}
 	}
 	/*Update input*/
-   this->AddInput(varenum_type,varlist,P1Enum);
+   this->AddInput(varenum_type,varlist,P1DGEnum);
 
 	/*Clean-up*/
@@ -4713,15 +4730,28 @@
 void       Element::SubglacialWaterPressure(int output_enum){/*{{{*/
 
-	int numvertices = this->GetNumberOfVertices();
-	IssmDouble p_water[numvertices];
-	Gauss* gauss=this->NewGauss();
+	bool ispwHydroArma;
+   int M;
+   int numvertices = this->GetNumberOfVertices();
+   IssmDouble p_water[numvertices];
+   IssmDouble* perturbationvalues = xNew<IssmDouble>(numvertices);
+   Gauss* gauss=this->NewGauss();
    Friction* friction = new Friction(this);
+   /*Calculate subglacial water pressure*/
    for(int i=0;i<numvertices;i++){
          gauss->GaussVertex(i);
          p_water[i] = friction->SubglacialWaterPressure(gauss);
-	}
-	this->AddInput(output_enum,p_water,P1DGEnum);
-	delete gauss;
+   }
+   /*Add perturbation in water pressure if HydrologyIsWaterPressureArmaEnum is true*/
+   this->parameters->FindParam(&ispwHydroArma,HydrologyIsWaterPressureArmaEnum);
+   if(ispwHydroArma){
+      this->GetInputListOnVertices(perturbationvalues,WaterPressureArmaPerturbationEnum);
+		for(int i=0;i<numvertices;i++) p_water[i] = p_water[i]+perturbationvalues[i];
+   }
+   /*Save*/
+   this->AddInput(output_enum,p_water,P1DGEnum);
+   /*Clean-up*/
+   delete gauss;
    delete friction;
+   xDelete<IssmDouble>(perturbationvalues);
 
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 27461)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 27462)
@@ -796,4 +796,7 @@
 				analyses_temp[numanalyses++]=L2ProjectionEPLAnalysisEnum;
 				analyses_temp[numanalyses++]=L2ProjectionBaseAnalysisEnum;
+			}
+			if(hydrology_model==HydrologyarmapwEnum){
+				analyses_temp[numanalyses++]=HydrologyArmapwAnalysisEnum;
 			}
 		}
Index: /issm/trunk-jpl/src/c/classes/Loads/Friction.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Loads/Friction.cpp	(revision 27461)
+++ /issm/trunk-jpl/src/c/classes/Loads/Friction.cpp	(revision 27462)
@@ -344,19 +344,20 @@
 
 	/*Get effective pressure*/
-	bool ispwStochastic;
-	IssmDouble Neff;
-	element->parameters->FindParam(&ispwStochastic,StochasticForcingIsWaterPressureEnum);
-	if(ispwStochastic){
-		/*Retrieve stochastic water pressure and compute ice pressure*/
-		IssmDouble p_ice,p_water,Neff_limit;
-		element->GetInputValue(&p_water,gauss,FrictionWaterPressureEnum);
-		element->parameters->FindParam(&Neff_limit,FrictionEffectivePressureLimitEnum);
-		p_ice = IcePressure(gauss);
-		Neff  = max(Neff_limit*p_ice, p_ice - p_water);
-	}	
-	else{
-		/*Compute effective pressure directly*/
-		Neff = EffectivePressure(gauss);
-	}
+	bool ispwHydro,ispwStochastic;
+   IssmDouble Neff;
+   element->parameters->FindParam(&ispwStochastic,StochasticForcingIsWaterPressureEnum);
+   element->parameters->FindParam(&ispwHydro,HydrologyIsWaterPressureArmaEnum);
+   if(ispwStochastic || ispwHydro){
+      /*Retrieve pre-computed water pressure and compute ice pressure*/
+      IssmDouble p_ice,p_water,Neff_limit;
+      element->GetInputValue(&p_water,gauss,FrictionWaterPressureEnum);
+      element->parameters->FindParam(&Neff_limit,FrictionEffectivePressureLimitEnum);
+      p_ice = IcePressure(gauss);
+      Neff  = max(Neff_limit*p_ice, p_ice - p_water);
+   }
+   else{
+      /*Compute effective pressure directly*/
+      Neff = EffectivePressure(gauss);
+   }
 	
 	/*Get velocity magnitude*/
@@ -559,15 +560,16 @@
 	IssmDouble vmag = VelMag(gauss);
 
-	bool ispwStochastic;
-	IssmDouble Neff;
-	element->parameters->FindParam(&ispwStochastic,StochasticForcingIsWaterPressureEnum);
-	if(ispwStochastic){
-		/*Retrieve stochastic water pressure and compute ice pressure*/
-		IssmDouble p_ice,p_water,Neff_limit;
-		element->GetInputValue(&p_water,gauss,FrictionWaterPressureEnum);
+	bool ispwHydro,ispwStochastic;
+   IssmDouble Neff;
+   element->parameters->FindParam(&ispwStochastic,StochasticForcingIsWaterPressureEnum);
+   element->parameters->FindParam(&ispwHydro,HydrologyIsWaterPressureArmaEnum);
+   if(ispwStochastic || ispwHydro){
+      /*Retrieve pre-computed water pressure and compute ice pressure*/
+      IssmDouble p_ice,p_water,Neff_limit;
+      element->GetInputValue(&p_water,gauss,FrictionWaterPressureEnum);
 		element->parameters->FindParam(&Neff_limit,FrictionEffectivePressureLimitEnum);
-		p_ice = IcePressure(gauss);
-		Neff  = max(Neff_limit*p_ice, p_ice - p_water);
-	}	
+      p_ice = IcePressure(gauss);
+      Neff  = max(Neff_limit*p_ice, p_ice - p_water);
+   }	
 	else{
 		/*Compute effective pressure directly*/
Index: /issm/trunk-jpl/src/c/cores/hydrology_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/hydrology_core.cpp	(revision 27461)
+++ /issm/trunk-jpl/src/c/cores/hydrology_core.cpp	(revision 27462)
@@ -261,4 +261,13 @@
 		delete analysis;
 	}
+
+	/*Using the armaPw hydrology model*/
+   else if (hydrology_model==HydrologyarmapwEnum){
+      femmodel->SetCurrentConfiguration(HydrologyArmapwAnalysisEnum);
+      if(VerboseSolution()) _printf0_("   updating subglacial water pressure\n");
+      HydrologyArmapwAnalysis* analysis = new HydrologyArmapwAnalysis();
+      analysis->UpdateSubglacialWaterPressure(femmodel);
+      delete analysis;
+   }
 	else{
 		_error_("Hydrology model "<< EnumToStringx(hydrology_model) <<" not supported yet");
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 27461)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 27462)
@@ -496,4 +496,5 @@
 	int hydrology_model;
 	iomodel->FindConstant(&hydrology_model,"md.hydrology.model");
+	parameters->AddObject(new BoolParam(HydrologyIsWaterPressureArmaEnum,false));
 	if(hydrology_model==HydrologydcEnum){
 		IssmDouble sedcomp, sedporo, watcomp, rhofresh, g;
@@ -533,4 +534,28 @@
 		/*Nothing to add*/
 	}
+	else if(hydrology_model==HydrologyarmapwEnum){
+		parameters->SetParam(true,HydrologyIsWaterPressureArmaEnum);
+      parameters->AddObject(iomodel->CopyConstantObject("md.hydrology.num_basins",HydrologyNumBasinsEnum));
+      parameters->AddObject(iomodel->CopyConstantObject("md.hydrology.num_breaks",HydrologyarmaNumBreaksEnum));
+      parameters->AddObject(iomodel->CopyConstantObject("md.hydrology.num_params",HydrologyarmaNumParamsEnum));
+      parameters->AddObject(iomodel->CopyConstantObject("md.hydrology.ar_order",HydrologyarmaarOrderEnum));
+      parameters->AddObject(iomodel->CopyConstantObject("md.hydrology.ma_order",HydrologyarmamaOrderEnum));
+      parameters->AddObject(iomodel->CopyConstantObject("md.hydrology.arma_timestep",HydrologyarmaTimestepEnum));
+      iomodel->FetchData(&transparam,&M,&N,"md.hydrology.datebreaks");
+      parameters->AddObject(new DoubleMatParam(HydrologyarmadatebreaksEnum,transparam,M,N));
+      xDelete<IssmDouble>(transparam);
+      iomodel->FetchData(&transparam,&M,&N,"md.hydrology.polynomialparams");
+      parameters->AddObject(new DoubleMatParam(HydrologyarmapolyparamsEnum,transparam,M,N));
+      xDelete<IssmDouble>(transparam);
+      iomodel->FetchData(&transparam,&M,&N,"md.hydrology.arlag_coefs");
+      parameters->AddObject(new DoubleMatParam(HydrologyarmaarlagcoefsEnum,transparam,M,N));
+      xDelete<IssmDouble>(transparam);
+      iomodel->FetchData(&transparam,&M,&N,"md.hydrology.malag_coefs");
+      parameters->AddObject(new DoubleMatParam(HydrologyarmamalagcoefsEnum,transparam,M,N));
+      xDelete<IssmDouble>(transparam);
+      iomodel->FetchData(&transparam,&M,&N,"md.hydrology.monthlyfactors");
+      parameters->AddObject(new DoubleMatParam(HydrologyarmaMonthlyFactorsEnum,transparam,M,N));
+      xDelete<IssmDouble>(transparam);
+   }
 	else{
 		_error_("Hydrology model "<<EnumToStringx(hydrology_model)<<" not supported yet");
Index: /issm/trunk-jpl/src/c/modules/StochasticForcingx/StochasticForcingx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/StochasticForcingx/StochasticForcingx.cpp	(revision 27461)
+++ /issm/trunk-jpl/src/c/modules/StochasticForcingx/StochasticForcingx.cpp	(revision 27462)
@@ -33,5 +33,9 @@
    femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum);
    femmodel->parameters->FindParam(&tstep_stoch,StochasticForcingTimestepEnum);
-		
+	
+	/*Check if we use HydroarmaPw*/
+	bool ispwHydro;
+	femmodel->parameters->FindParam(&ispwHydro,HydrologyIsWaterPressureArmaEnum);
+
 	#ifndef _HAVE_AD_
    if((fmod(time,tstep_stoch)<fmod((time-dt),tstep_stoch)) || (time<=starttime+dt) || tstep_stoch==dt) isstepforstoch = true;
@@ -76,5 +80,5 @@
 
 		/*Deal with the ARMA models*/
-		if(fields[j]==SMBarmaEnum || fields[j]==FrontalForcingsRignotarmaEnum || fields[j]==BasalforcingsDeepwaterMeltingRatearmaEnum || fields[j]==FrontalForcingsSubglacialDischargearmaEnum){
+		if(fields[j]==SMBarmaEnum || fields[j]==FrontalForcingsRignotarmaEnum || fields[j]==BasalforcingsDeepwaterMeltingRatearmaEnum || fields[j]==FrontalForcingsSubglacialDischargearmaEnum || (fields[j]==FrictionWaterPressureEnum && ispwHydro)){
 			switch(fields[j]){
 				case SMBarmaEnum:
@@ -93,4 +97,8 @@
 					dimenum_type   = FrontalForcingsBasinIdEnum;
 					noiseenum_type = SubglacialdischargeARMANoiseEnum;
+					break;	
+				case FrictionWaterPressureEnum:
+					dimenum_type   = HydrologyBasinsIdEnum;
+					noiseenum_type = FrictionWaterPressureNoiseEnum;
 					break;	
 			}
Index: /issm/trunk-jpl/src/c/shared/Enum/Enum.vim
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 27461)
+++ /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 27462)
@@ -245,4 +245,14 @@
 syn keyword cConstant GroundinglineNumRequestedOutputsEnum
 syn keyword cConstant GroundinglineRequestedOutputsEnum
+syn keyword cConstant HydrologyarmaarOrderEnum
+syn keyword cConstant HydrologyarmaarlagcoefsEnum
+syn keyword cConstant HydrologyarmadatebreaksEnum
+syn keyword cConstant HydrologyarmamalagcoefsEnum
+syn keyword cConstant HydrologyarmamaOrderEnum
+syn keyword cConstant HydrologyarmaMonthlyFactorsEnum
+syn keyword cConstant HydrologyarmaNumBreaksEnum
+syn keyword cConstant HydrologyarmaNumParamsEnum
+syn keyword cConstant HydrologyarmapolyparamsEnum
+syn keyword cConstant HydrologyarmaTimestepEnum
 syn keyword cConstant HydrologyAveragingEnum
 syn keyword cConstant HydrologyCavitySpacingEnum
@@ -250,6 +260,8 @@
 syn keyword cConstant HydrologyEnglacialVoidRatioEnum
 syn keyword cConstant HydrologyIschannelsEnum
+syn keyword cConstant HydrologyIsWaterPressureArmaEnum
 syn keyword cConstant HydrologyMeltFlagEnum
 syn keyword cConstant HydrologyModelEnum
+syn keyword cConstant HydrologyNumBasinsEnum
 syn keyword cConstant HydrologyNumRequestedOutputsEnum
 syn keyword cConstant HydrologyPressureMeltCoefficientEnum
@@ -804,4 +816,5 @@
 syn keyword cConstant FrictionWaterLayerEnum
 syn keyword cConstant FrictionWaterPressureEnum
+syn keyword cConstant FrictionWaterPressureNoiseEnum
 syn keyword cConstant FrictionfEnum
 syn keyword cConstant FrontalForcingsBasinIdEnum
@@ -818,4 +831,5 @@
 syn keyword cConstant HydraulicPotentialOldEnum
 syn keyword cConstant HydrologyBasalFluxEnum
+syn keyword cConstant HydrologyBasinsIdEnum
 syn keyword cConstant HydrologyBumpHeightEnum
 syn keyword cConstant HydrologyBumpSpacingEnum
@@ -1184,4 +1198,7 @@
 syn keyword cConstant WaterfractionEnum
 syn keyword cConstant WaterheightEnum
+syn keyword cConstant WaterPressureArmaPerturbationEnum
+syn keyword cConstant WaterPressureValuesAutoregressionEnum
+syn keyword cConstant WaterPressureValuesMovingaverageEnum
 syn keyword cConstant WeightsLevelsetObservationEnum
 syn keyword cConstant WeightsSurfaceObservationEnum
@@ -1425,4 +1442,6 @@
 syn keyword cConstant HOFSApproximationEnum
 syn keyword cConstant HookEnum
+syn keyword cConstant HydrologyArmapwAnalysisEnum
+syn keyword cConstant HydrologyarmapwEnum
 syn keyword cConstant HydrologyDCEfficientAnalysisEnum
 syn keyword cConstant HydrologyDCInefficientAnalysisEnum
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 27461)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 27462)
@@ -239,4 +239,14 @@
 	GroundinglineNumRequestedOutputsEnum,
 	GroundinglineRequestedOutputsEnum,
+	HydrologyarmaarOrderEnum,
+   HydrologyarmaarlagcoefsEnum,
+   HydrologyarmadatebreaksEnum,
+   HydrologyarmamalagcoefsEnum,
+   HydrologyarmamaOrderEnum,
+   HydrologyarmaMonthlyFactorsEnum,
+   HydrologyarmaNumBreaksEnum,
+   HydrologyarmaNumParamsEnum,
+   HydrologyarmapolyparamsEnum,
+   HydrologyarmaTimestepEnum,
 	HydrologyAveragingEnum,
 	HydrologyCavitySpacingEnum,	
@@ -244,6 +254,8 @@
 	HydrologyEnglacialVoidRatioEnum,
 	HydrologyIschannelsEnum,
+	HydrologyIsWaterPressureArmaEnum,
 	HydrologyMeltFlagEnum,
 	HydrologyModelEnum,
+	HydrologyNumBasinsEnum,
 	HydrologyNumRequestedOutputsEnum,
 	HydrologyPressureMeltCoefficientEnum,
@@ -800,4 +812,5 @@
 	FrictionWaterLayerEnum,
 	FrictionWaterPressureEnum,
+	FrictionWaterPressureNoiseEnum,
 	FrictionfEnum,
 	FrontalForcingsBasinIdEnum,
@@ -814,4 +827,5 @@
 	HydraulicPotentialOldEnum,
 	HydrologyBasalFluxEnum,
+	HydrologyBasinsIdEnum,
 	HydrologyBumpHeightEnum,
 	HydrologyBumpSpacingEnum,
@@ -1181,4 +1195,7 @@
 	WaterfractionEnum,
 	WaterheightEnum,
+	WaterPressureArmaPerturbationEnum,
+   WaterPressureValuesAutoregressionEnum,
+   WaterPressureValuesMovingaverageEnum,
 	WeightsLevelsetObservationEnum,
 	WeightsSurfaceObservationEnum,
@@ -1424,4 +1441,6 @@
 	HOFSApproximationEnum,
 	HookEnum,
+	HydrologyArmapwAnalysisEnum,
+   HydrologyarmapwEnum,
 	HydrologyDCEfficientAnalysisEnum,
 	HydrologyDCInefficientAnalysisEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 27461)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 27462)
@@ -247,4 +247,14 @@
 		case GroundinglineNumRequestedOutputsEnum : return "GroundinglineNumRequestedOutputs";
 		case GroundinglineRequestedOutputsEnum : return "GroundinglineRequestedOutputs";
+		case HydrologyarmaarOrderEnum : return "HydrologyarmaarOrder";
+		case HydrologyarmaarlagcoefsEnum : return "Hydrologyarmaarlagcoefs";
+		case HydrologyarmadatebreaksEnum : return "Hydrologyarmadatebreaks";
+		case HydrologyarmamalagcoefsEnum : return "Hydrologyarmamalagcoefs";
+		case HydrologyarmamaOrderEnum : return "HydrologyarmamaOrder";
+		case HydrologyarmaMonthlyFactorsEnum : return "HydrologyarmaMonthlyFactors";
+		case HydrologyarmaNumBreaksEnum : return "HydrologyarmaNumBreaks";
+		case HydrologyarmaNumParamsEnum : return "HydrologyarmaNumParams";
+		case HydrologyarmapolyparamsEnum : return "Hydrologyarmapolyparams";
+		case HydrologyarmaTimestepEnum : return "HydrologyarmaTimestep";
 		case HydrologyAveragingEnum : return "HydrologyAveraging";
 		case HydrologyCavitySpacingEnum : return "HydrologyCavitySpacing";
@@ -252,6 +262,8 @@
 		case HydrologyEnglacialVoidRatioEnum : return "HydrologyEnglacialVoidRatio";
 		case HydrologyIschannelsEnum : return "HydrologyIschannels";
+		case HydrologyIsWaterPressureArmaEnum : return "HydrologyIsWaterPressureArma";
 		case HydrologyMeltFlagEnum : return "HydrologyMeltFlag";
 		case HydrologyModelEnum : return "HydrologyModel";
+		case HydrologyNumBasinsEnum : return "HydrologyNumBasins";
 		case HydrologyNumRequestedOutputsEnum : return "HydrologyNumRequestedOutputs";
 		case HydrologyPressureMeltCoefficientEnum : return "HydrologyPressureMeltCoefficient";
@@ -806,4 +818,5 @@
 		case FrictionWaterLayerEnum : return "FrictionWaterLayer";
 		case FrictionWaterPressureEnum : return "FrictionWaterPressure";
+		case FrictionWaterPressureNoiseEnum : return "FrictionWaterPressureNoise";
 		case FrictionfEnum : return "Frictionf";
 		case FrontalForcingsBasinIdEnum : return "FrontalForcingsBasinId";
@@ -820,4 +833,5 @@
 		case HydraulicPotentialOldEnum : return "HydraulicPotentialOld";
 		case HydrologyBasalFluxEnum : return "HydrologyBasalFlux";
+		case HydrologyBasinsIdEnum : return "HydrologyBasinsId";
 		case HydrologyBumpHeightEnum : return "HydrologyBumpHeight";
 		case HydrologyBumpSpacingEnum : return "HydrologyBumpSpacing";
@@ -1186,4 +1200,7 @@
 		case WaterfractionEnum : return "Waterfraction";
 		case WaterheightEnum : return "Waterheight";
+		case WaterPressureArmaPerturbationEnum : return "WaterPressureArmaPerturbation";
+		case WaterPressureValuesAutoregressionEnum : return "WaterPressureValuesAutoregression";
+		case WaterPressureValuesMovingaverageEnum : return "WaterPressureValuesMovingaverage";
 		case WeightsLevelsetObservationEnum : return "WeightsLevelsetObservation";
 		case WeightsSurfaceObservationEnum : return "WeightsSurfaceObservation";
@@ -1427,4 +1444,6 @@
 		case HOFSApproximationEnum : return "HOFSApproximation";
 		case HookEnum : return "Hook";
+		case HydrologyArmapwAnalysisEnum : return "HydrologyArmapwAnalysis";
+		case HydrologyarmapwEnum : return "Hydrologyarmapw";
 		case HydrologyDCEfficientAnalysisEnum : return "HydrologyDCEfficientAnalysis";
 		case HydrologyDCInefficientAnalysisEnum : return "HydrologyDCInefficientAnalysis";
Index: /issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim	(revision 27461)
+++ /issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim	(revision 27462)
@@ -238,4 +238,14 @@
 syn keyword juliaConstC GroundinglineNumRequestedOutputsEnum
 syn keyword juliaConstC GroundinglineRequestedOutputsEnum
+syn keyword juliaConstC HydrologyarmaarOrderEnum
+syn keyword juliaConstC HydrologyarmaarlagcoefsEnum
+syn keyword juliaConstC HydrologyarmadatebreaksEnum
+syn keyword juliaConstC HydrologyarmamalagcoefsEnum
+syn keyword juliaConstC HydrologyarmamaOrderEnum
+syn keyword juliaConstC HydrologyarmaMonthlyFactorsEnum
+syn keyword juliaConstC HydrologyarmaNumBreaksEnum
+syn keyword juliaConstC HydrologyarmaNumParamsEnum
+syn keyword juliaConstC HydrologyarmapolyparamsEnum
+syn keyword juliaConstC HydrologyarmaTimestepEnum
 syn keyword juliaConstC HydrologyAveragingEnum
 syn keyword juliaConstC HydrologyCavitySpacingEnum
@@ -243,6 +253,8 @@
 syn keyword juliaConstC HydrologyEnglacialVoidRatioEnum
 syn keyword juliaConstC HydrologyIschannelsEnum
+syn keyword juliaConstC HydrologyIsWaterPressureArmaEnum
 syn keyword juliaConstC HydrologyMeltFlagEnum
 syn keyword juliaConstC HydrologyModelEnum
+syn keyword juliaConstC HydrologyNumBasinsEnum
 syn keyword juliaConstC HydrologyNumRequestedOutputsEnum
 syn keyword juliaConstC HydrologyPressureMeltCoefficientEnum
@@ -797,4 +809,5 @@
 syn keyword juliaConstC FrictionWaterLayerEnum
 syn keyword juliaConstC FrictionWaterPressureEnum
+syn keyword juliaConstC FrictionWaterPressureNoiseEnum
 syn keyword juliaConstC FrictionfEnum
 syn keyword juliaConstC FrontalForcingsBasinIdEnum
@@ -811,4 +824,5 @@
 syn keyword juliaConstC HydraulicPotentialOldEnum
 syn keyword juliaConstC HydrologyBasalFluxEnum
+syn keyword juliaConstC HydrologyBasinsIdEnum
 syn keyword juliaConstC HydrologyBumpHeightEnum
 syn keyword juliaConstC HydrologyBumpSpacingEnum
@@ -1177,4 +1191,7 @@
 syn keyword juliaConstC WaterfractionEnum
 syn keyword juliaConstC WaterheightEnum
+syn keyword juliaConstC WaterPressureArmaPerturbationEnum
+syn keyword juliaConstC WaterPressureValuesAutoregressionEnum
+syn keyword juliaConstC WaterPressureValuesMovingaverageEnum
 syn keyword juliaConstC WeightsLevelsetObservationEnum
 syn keyword juliaConstC WeightsSurfaceObservationEnum
@@ -1418,4 +1435,6 @@
 syn keyword juliaConstC HOFSApproximationEnum
 syn keyword juliaConstC HookEnum
+syn keyword juliaConstC HydrologyArmapwAnalysisEnum
+syn keyword juliaConstC HydrologyarmapwEnum
 syn keyword juliaConstC HydrologyDCEfficientAnalysisEnum
 syn keyword juliaConstC HydrologyDCInefficientAnalysisEnum
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 27461)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 27462)
@@ -250,18 +250,30 @@
 	      else if (strcmp(name,"GroundinglineNumRequestedOutputs")==0) return GroundinglineNumRequestedOutputsEnum;
 	      else if (strcmp(name,"GroundinglineRequestedOutputs")==0) return GroundinglineRequestedOutputsEnum;
-	      else if (strcmp(name,"HydrologyAveraging")==0) return HydrologyAveragingEnum;
+	      else if (strcmp(name,"HydrologyarmaarOrder")==0) return HydrologyarmaarOrderEnum;
+	      else if (strcmp(name,"Hydrologyarmaarlagcoefs")==0) return HydrologyarmaarlagcoefsEnum;
+	      else if (strcmp(name,"Hydrologyarmadatebreaks")==0) return HydrologyarmadatebreaksEnum;
+	      else if (strcmp(name,"Hydrologyarmamalagcoefs")==0) return HydrologyarmamalagcoefsEnum;
+	      else if (strcmp(name,"HydrologyarmamaOrder")==0) return HydrologyarmamaOrderEnum;
+	      else if (strcmp(name,"HydrologyarmaMonthlyFactors")==0) return HydrologyarmaMonthlyFactorsEnum;
+	      else if (strcmp(name,"HydrologyarmaNumBreaks")==0) return HydrologyarmaNumBreaksEnum;
+	      else if (strcmp(name,"HydrologyarmaNumParams")==0) return HydrologyarmaNumParamsEnum;
+	      else if (strcmp(name,"Hydrologyarmapolyparams")==0) return HydrologyarmapolyparamsEnum;
+	      else if (strcmp(name,"HydrologyarmaTimestep")==0) return HydrologyarmaTimestepEnum;
+         else stage=3;
+   }
+   if(stage==3){
+	      if (strcmp(name,"HydrologyAveraging")==0) return HydrologyAveragingEnum;
 	      else if (strcmp(name,"HydrologyCavitySpacing")==0) return HydrologyCavitySpacingEnum;
 	      else if (strcmp(name,"HydrologyChannelSheetWidth")==0) return HydrologyChannelSheetWidthEnum;
 	      else if (strcmp(name,"HydrologyEnglacialVoidRatio")==0) return HydrologyEnglacialVoidRatioEnum;
 	      else if (strcmp(name,"HydrologyIschannels")==0) return HydrologyIschannelsEnum;
+	      else if (strcmp(name,"HydrologyIsWaterPressureArma")==0) return HydrologyIsWaterPressureArmaEnum;
 	      else if (strcmp(name,"HydrologyMeltFlag")==0) return HydrologyMeltFlagEnum;
 	      else if (strcmp(name,"HydrologyModel")==0) return HydrologyModelEnum;
+	      else if (strcmp(name,"HydrologyNumBasins")==0) return HydrologyNumBasinsEnum;
 	      else if (strcmp(name,"HydrologyNumRequestedOutputs")==0) return HydrologyNumRequestedOutputsEnum;
 	      else if (strcmp(name,"HydrologyPressureMeltCoefficient")==0) return HydrologyPressureMeltCoefficientEnum;
 	      else if (strcmp(name,"HydrologyRelaxation")==0) return HydrologyRelaxationEnum;
-         else stage=3;
-   }
-   if(stage==3){
-	      if (strcmp(name,"HydrologyRequestedOutputs")==0) return HydrologyRequestedOutputsEnum;
+	      else if (strcmp(name,"HydrologyRequestedOutputs")==0) return HydrologyRequestedOutputsEnum;
 	      else if (strcmp(name,"HydrologySedimentKmax")==0) return HydrologySedimentKmaxEnum;
 	      else if (strcmp(name,"HydrologyStepsPerStep")==0) return HydrologyStepsPerStepEnum;
@@ -371,5 +383,8 @@
 	      else if (strcmp(name,"MaterialsHeatcapacity")==0) return MaterialsHeatcapacityEnum;
 	      else if (strcmp(name,"MaterialsLatentheat")==0) return MaterialsLatentheatEnum;
-	      else if (strcmp(name,"MaterialsMeltingpoint")==0) return MaterialsMeltingpointEnum;
+         else stage=4;
+   }
+   if(stage==4){
+	      if (strcmp(name,"MaterialsMeltingpoint")==0) return MaterialsMeltingpointEnum;
 	      else if (strcmp(name,"MaterialsMixedLayerCapacity")==0) return MaterialsMixedLayerCapacityEnum;
 	      else if (strcmp(name,"MaterialsMuWater")==0) return MaterialsMuWaterEnum;
@@ -383,8 +398,5 @@
 	      else if (strcmp(name,"MeltingOffset")==0) return MeltingOffsetEnum;
 	      else if (strcmp(name,"MeshAverageVertexConnectivity")==0) return MeshAverageVertexConnectivityEnum;
-         else stage=4;
-   }
-   if(stage==4){
-	      if (strcmp(name,"MeshElementtype")==0) return MeshElementtypeEnum;
+	      else if (strcmp(name,"MeshElementtype")==0) return MeshElementtypeEnum;
 	      else if (strcmp(name,"MeshNumberoflayers")==0) return MeshNumberoflayersEnum;
 	      else if (strcmp(name,"MeshNumberofvertices")==0) return MeshNumberofverticesEnum;
@@ -494,5 +506,8 @@
 	      else if (strcmp(name,"StochasticForcingDefaultDimension")==0) return StochasticForcingDefaultDimensionEnum;
 	      else if (strcmp(name,"StochasticForcingDimensions")==0) return StochasticForcingDimensionsEnum;
-	      else if (strcmp(name,"StochasticForcingFields")==0) return StochasticForcingFieldsEnum;
+         else stage=5;
+   }
+   if(stage==5){
+	      if (strcmp(name,"StochasticForcingFields")==0) return StochasticForcingFieldsEnum;
 	      else if (strcmp(name,"StochasticForcingIsEffectivePressure")==0) return StochasticForcingIsEffectivePressureEnum;
 	      else if (strcmp(name,"StochasticForcingIsStochasticForcing")==0) return StochasticForcingIsStochasticForcingEnum;
@@ -506,8 +521,5 @@
 	      else if (strcmp(name,"SolidearthSettingsRotation")==0) return SolidearthSettingsRotationEnum;
 	      else if (strcmp(name,"SolidearthSettingsMaxSHCoeff")==0) return SolidearthSettingsMaxSHCoeffEnum;
-         else stage=5;
-   }
-   if(stage==5){
-	      if (strcmp(name,"SettingsIoGather")==0) return SettingsIoGatherEnum;
+	      else if (strcmp(name,"SettingsIoGather")==0) return SettingsIoGatherEnum;
 	      else if (strcmp(name,"SettingsNumResultsOnNodes")==0) return SettingsNumResultsOnNodesEnum;
 	      else if (strcmp(name,"SettingsOutputFrequency")==0) return SettingsOutputFrequencyEnum;
@@ -617,5 +629,8 @@
 	      else if (strcmp(name,"ThermalPenaltyLock")==0) return ThermalPenaltyLockEnum;
 	      else if (strcmp(name,"ThermalPenaltyThreshold")==0) return ThermalPenaltyThresholdEnum;
-	      else if (strcmp(name,"ThermalReltol")==0) return ThermalReltolEnum;
+         else stage=6;
+   }
+   if(stage==6){
+	      if (strcmp(name,"ThermalReltol")==0) return ThermalReltolEnum;
 	      else if (strcmp(name,"ThermalRequestedOutputs")==0) return ThermalRequestedOutputsEnum;
 	      else if (strcmp(name,"ThermalStabilization")==0) return ThermalStabilizationEnum;
@@ -629,8 +644,5 @@
 	      else if (strcmp(name,"TimesteppingCycleForcing")==0) return TimesteppingCycleForcingEnum;
 	      else if (strcmp(name,"TimesteppingStartTime")==0) return TimesteppingStartTimeEnum;
-         else stage=6;
-   }
-   if(stage==6){
-	      if (strcmp(name,"TimesteppingTimeStep")==0) return TimesteppingTimeStepEnum;
+	      else if (strcmp(name,"TimesteppingTimeStep")==0) return TimesteppingTimeStepEnum;
 	      else if (strcmp(name,"TimesteppingTimeStepMax")==0) return TimesteppingTimeStepMaxEnum;
 	      else if (strcmp(name,"TimesteppingTimeStepMin")==0) return TimesteppingTimeStepMinEnum;
@@ -740,5 +752,8 @@
 	      else if (strcmp(name,"CalvingHabFraction")==0) return CalvingHabFractionEnum;
 	      else if (strcmp(name,"CalvingAblationrate")==0) return CalvingAblationrateEnum;
-	      else if (strcmp(name,"CalvingMeltingrate")==0) return CalvingMeltingrateEnum;
+         else stage=7;
+   }
+   if(stage==7){
+	      if (strcmp(name,"CalvingMeltingrate")==0) return CalvingMeltingrateEnum;
 	      else if (strcmp(name,"CalvingStressThresholdFloatingice")==0) return CalvingStressThresholdFloatingiceEnum;
 	      else if (strcmp(name,"CalvingStressThresholdGroundedice")==0) return CalvingStressThresholdGroundediceEnum;
@@ -752,8 +767,5 @@
 	      else if (strcmp(name,"DamageD")==0) return DamageDEnum;
 	      else if (strcmp(name,"DamageDOld")==0) return DamageDOldEnum;
-         else stage=7;
-   }
-   if(stage==7){
-	      if (strcmp(name,"DamageDbar")==0) return DamageDbarEnum;
+	      else if (strcmp(name,"DamageDbar")==0) return DamageDbarEnum;
 	      else if (strcmp(name,"DamageDbarOld")==0) return DamageDbarOldEnum;
 	      else if (strcmp(name,"DamageF")==0) return DamageFEnum;
@@ -824,4 +836,5 @@
 	      else if (strcmp(name,"FrictionWaterLayer")==0) return FrictionWaterLayerEnum;
 	      else if (strcmp(name,"FrictionWaterPressure")==0) return FrictionWaterPressureEnum;
+	      else if (strcmp(name,"FrictionWaterPressureNoise")==0) return FrictionWaterPressureNoiseEnum;
 	      else if (strcmp(name,"Frictionf")==0) return FrictionfEnum;
 	      else if (strcmp(name,"FrontalForcingsBasinId")==0) return FrontalForcingsBasinIdEnum;
@@ -838,4 +851,5 @@
 	      else if (strcmp(name,"HydraulicPotentialOld")==0) return HydraulicPotentialOldEnum;
 	      else if (strcmp(name,"HydrologyBasalFlux")==0) return HydrologyBasalFluxEnum;
+	      else if (strcmp(name,"HydrologyBasinsId")==0) return HydrologyBasinsIdEnum;
 	      else if (strcmp(name,"HydrologyBumpHeight")==0) return HydrologyBumpHeightEnum;
 	      else if (strcmp(name,"HydrologyBumpSpacing")==0) return HydrologyBumpSpacingEnum;
@@ -861,5 +875,8 @@
 	      else if (strcmp(name,"HydrologyHeadOld")==0) return HydrologyHeadOldEnum;
 	      else if (strcmp(name,"HydrologyMoulinInput")==0) return HydrologyMoulinInputEnum;
-	      else if (strcmp(name,"HydrologyNeumannflux")==0) return HydrologyNeumannfluxEnum;
+         else stage=8;
+   }
+   if(stage==8){
+	      if (strcmp(name,"HydrologyNeumannflux")==0) return HydrologyNeumannfluxEnum;
 	      else if (strcmp(name,"HydrologyReynolds")==0) return HydrologyReynoldsEnum;
 	      else if (strcmp(name,"HydrologySheetConductivity")==0) return HydrologySheetConductivityEnum;
@@ -875,8 +892,5 @@
 	      else if (strcmp(name,"Ice")==0) return IceEnum;
 	      else if (strcmp(name,"IceMaskNodeActivation")==0) return IceMaskNodeActivationEnum;
-         else stage=8;
-   }
-   if(stage==8){
-	      if (strcmp(name,"Input")==0) return InputEnum;
+	      else if (strcmp(name,"Input")==0) return InputEnum;
 	      else if (strcmp(name,"InversionCostFunctionsCoefficients")==0) return InversionCostFunctionsCoefficientsEnum;
 	      else if (strcmp(name,"InversionSurfaceObs")==0) return InversionSurfaceObsEnum;
@@ -984,5 +998,8 @@
 	      else if (strcmp(name,"SealevelchangeAlphaIndex")==0) return SealevelchangeAlphaIndexEnum;
 	      else if (strcmp(name,"SealevelchangeAzimuthIndex")==0) return SealevelchangeAzimuthIndexEnum;
-	      else if (strcmp(name,"SealevelchangeGrot")==0) return SealevelchangeGrotEnum;
+         else stage=9;
+   }
+   if(stage==9){
+	      if (strcmp(name,"SealevelchangeGrot")==0) return SealevelchangeGrotEnum;
 	      else if (strcmp(name,"SealevelchangeGSatGravirot")==0) return SealevelchangeGSatGravirotEnum;
 	      else if (strcmp(name,"SealevelchangeGUrot")==0) return SealevelchangeGUrotEnum;
@@ -998,8 +1015,5 @@
 	      else if (strcmp(name,"SealevelchangeViscousSG")==0) return SealevelchangeViscousSGEnum;
 	      else if (strcmp(name,"SealevelchangeViscousU")==0) return SealevelchangeViscousUEnum;
-         else stage=9;
-   }
-   if(stage==9){
-	      if (strcmp(name,"SealevelchangeViscousN")==0) return SealevelchangeViscousNEnum;
+	      else if (strcmp(name,"SealevelchangeViscousN")==0) return SealevelchangeViscousNEnum;
 	      else if (strcmp(name,"SealevelchangeViscousE")==0) return SealevelchangeViscousEEnum;
 	      else if (strcmp(name,"CouplingTransferCount")==0) return CouplingTransferCountEnum;
@@ -1107,5 +1121,8 @@
 	      else if (strcmp(name,"SmbTeValue")==0) return SmbTeValueEnum;
 	      else if (strcmp(name,"SmbTemperaturesAnomaly")==0) return SmbTemperaturesAnomalyEnum;
-	      else if (strcmp(name,"SmbTemperaturesLgm")==0) return SmbTemperaturesLgmEnum;
+         else stage=10;
+   }
+   if(stage==10){
+	      if (strcmp(name,"SmbTemperaturesLgm")==0) return SmbTemperaturesLgmEnum;
 	      else if (strcmp(name,"SmbTemperaturesPresentday")==0) return SmbTemperaturesPresentdayEnum;
 	      else if (strcmp(name,"SmbTemperaturesReconstructed")==0) return SmbTemperaturesReconstructedEnum;
@@ -1121,8 +1138,5 @@
 	      else if (strcmp(name,"SmbWAdd")==0) return SmbWAddEnum;
 	      else if (strcmp(name,"SmbWini")==0) return SmbWiniEnum;
-         else stage=10;
-   }
-   if(stage==10){
-	      if (strcmp(name,"SmbZMax")==0) return SmbZMaxEnum;
+	      else if (strcmp(name,"SmbZMax")==0) return SmbZMaxEnum;
 	      else if (strcmp(name,"SmbZMin")==0) return SmbZMinEnum;
 	      else if (strcmp(name,"SmbZTop")==0) return SmbZTopEnum;
@@ -1213,4 +1227,7 @@
 	      else if (strcmp(name,"Waterfraction")==0) return WaterfractionEnum;
 	      else if (strcmp(name,"Waterheight")==0) return WaterheightEnum;
+	      else if (strcmp(name,"WaterPressureArmaPerturbation")==0) return WaterPressureArmaPerturbationEnum;
+	      else if (strcmp(name,"WaterPressureValuesAutoregression")==0) return WaterPressureValuesAutoregressionEnum;
+	      else if (strcmp(name,"WaterPressureValuesMovingaverage")==0) return WaterPressureValuesMovingaverageEnum;
 	      else if (strcmp(name,"WeightsLevelsetObservation")==0) return WeightsLevelsetObservationEnum;
 	      else if (strcmp(name,"WeightsSurfaceObservation")==0) return WeightsSurfaceObservationEnum;
@@ -1227,5 +1244,8 @@
 	      else if (strcmp(name,"Outputdefinition16")==0) return Outputdefinition16Enum;
 	      else if (strcmp(name,"Outputdefinition17")==0) return Outputdefinition17Enum;
-	      else if (strcmp(name,"Outputdefinition18")==0) return Outputdefinition18Enum;
+         else stage=11;
+   }
+   if(stage==11){
+	      if (strcmp(name,"Outputdefinition18")==0) return Outputdefinition18Enum;
 	      else if (strcmp(name,"Outputdefinition19")==0) return Outputdefinition19Enum;
 	      else if (strcmp(name,"Outputdefinition20")==0) return Outputdefinition20Enum;
@@ -1244,8 +1264,5 @@
 	      else if (strcmp(name,"Outputdefinition32")==0) return Outputdefinition32Enum;
 	      else if (strcmp(name,"Outputdefinition33")==0) return Outputdefinition33Enum;
-         else stage=11;
-   }
-   if(stage==11){
-	      if (strcmp(name,"Outputdefinition34")==0) return Outputdefinition34Enum;
+	      else if (strcmp(name,"Outputdefinition34")==0) return Outputdefinition34Enum;
 	      else if (strcmp(name,"Outputdefinition35")==0) return Outputdefinition35Enum;
 	      else if (strcmp(name,"Outputdefinition36")==0) return Outputdefinition36Enum;
@@ -1350,5 +1367,8 @@
 	      else if (strcmp(name,"BoolInput")==0) return BoolInputEnum;
 	      else if (strcmp(name,"IntInput")==0) return IntInputEnum;
-	      else if (strcmp(name,"DoubleInput")==0) return DoubleInputEnum;
+         else stage=12;
+   }
+   if(stage==12){
+	      if (strcmp(name,"DoubleInput")==0) return DoubleInputEnum;
 	      else if (strcmp(name,"BoolParam")==0) return BoolParamEnum;
 	      else if (strcmp(name,"Boundary")==0) return BoundaryEnum;
@@ -1367,8 +1387,5 @@
 	      else if (strcmp(name,"Channel")==0) return ChannelEnum;
 	      else if (strcmp(name,"ChannelArea")==0) return ChannelAreaEnum;
-         else stage=12;
-   }
-   if(stage==12){
-	      if (strcmp(name,"ChannelAreaOld")==0) return ChannelAreaOldEnum;
+	      else if (strcmp(name,"ChannelAreaOld")==0) return ChannelAreaOldEnum;
 	      else if (strcmp(name,"ChannelDischarge")==0) return ChannelDischargeEnum;
 	      else if (strcmp(name,"Closed")==0) return ClosedEnum;
@@ -1460,4 +1477,6 @@
 	      else if (strcmp(name,"HOFSApproximation")==0) return HOFSApproximationEnum;
 	      else if (strcmp(name,"Hook")==0) return HookEnum;
+	      else if (strcmp(name,"HydrologyArmapwAnalysis")==0) return HydrologyArmapwAnalysisEnum;
+	      else if (strcmp(name,"Hydrologyarmapw")==0) return HydrologyarmapwEnum;
 	      else if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum;
 	      else if (strcmp(name,"HydrologyDCInefficientAnalysis")==0) return HydrologyDCInefficientAnalysisEnum;
@@ -1471,5 +1490,8 @@
 	      else if (strcmp(name,"HydrologySubTime")==0) return HydrologySubTimeEnum;
 	      else if (strcmp(name,"Hydrologydc")==0) return HydrologydcEnum;
-	      else if (strcmp(name,"Hydrologypism")==0) return HydrologypismEnum;
+         else stage=13;
+   }
+   if(stage==13){
+	      if (strcmp(name,"Hydrologypism")==0) return HydrologypismEnum;
 	      else if (strcmp(name,"Hydrologyshakti")==0) return HydrologyshaktiEnum;
 	      else if (strcmp(name,"Hydrologyshreve")==0) return HydrologyshreveEnum;
@@ -1490,8 +1512,5 @@
 	      else if (strcmp(name,"IntParam")==0) return IntParamEnum;
 	      else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
-         else stage=13;
-   }
-   if(stage==13){
-	      if (strcmp(name,"Inputs")==0) return InputsEnum;
+	      else if (strcmp(name,"Inputs")==0) return InputsEnum;
 	      else if (strcmp(name,"Internal")==0) return InternalEnum;
 	      else if (strcmp(name,"Intersect")==0) return IntersectEnum;
@@ -1594,5 +1613,8 @@
 	      else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
 	      else if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
-	      else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
+         else stage=14;
+   }
+   if(stage==14){
+	      if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
 	      else if (strcmp(name,"P1xP3")==0) return P1xP3Enum;
 	      else if (strcmp(name,"P1xP4")==0) return P1xP4Enum;
@@ -1613,8 +1635,5 @@
 	      else if (strcmp(name,"Regionaloutput")==0) return RegionaloutputEnum;
 	      else if (strcmp(name,"Regular")==0) return RegularEnum;
-         else stage=14;
-   }
-   if(stage==14){
-	      if (strcmp(name,"RecoveryAnalysis")==0) return RecoveryAnalysisEnum;
+	      else if (strcmp(name,"RecoveryAnalysis")==0) return RecoveryAnalysisEnum;
 	      else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
 	      else if (strcmp(name,"SamplingAnalysis")==0) return SamplingAnalysisEnum;
@@ -1717,5 +1736,8 @@
 	      else if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum;
 	      else if (strcmp(name,"CalvingdevCoeff")==0) return CalvingdevCoeffEnum;
-	      else if (strcmp(name,"DeviatoricStress")==0) return DeviatoricStressEnum;
+         else stage=15;
+   }
+   if(stage==15){
+	      if (strcmp(name,"DeviatoricStress")==0) return DeviatoricStressEnum;
 	      else if (strcmp(name,"EtaAbsGradient")==0) return EtaAbsGradientEnum;
 	      else if (strcmp(name,"MeshZ")==0) return MeshZEnum;
@@ -1731,5 +1753,5 @@
 	      else if (strcmp(name,"TriangleInterp")==0) return TriangleInterpEnum;
 	      else if (strcmp(name,"MaximumNumberOfDefinitions")==0) return MaximumNumberOfDefinitionsEnum;
-         else stage=15;
+         else stage=16;
    }
 	/*If we reach this point, the string provided has not been found*/
Index: /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 27461)
+++ /issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp	(revision 27462)
@@ -291,4 +291,5 @@
 		case 5: return HydrologyGlaDSEnum;
 		case 6: return HydrologyTwsEnum;
+		case 7: return HydrologyarmapwEnum;
 		default: _error_("Marshalled hydrology code \""<<enum_in<<"\" not supported yet");
 	}
Index: /issm/trunk-jpl/src/m/classes/stochasticforcing.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/stochasticforcing.m	(revision 27461)
+++ /issm/trunk-jpl/src/m/classes/stochasticforcing.m	(revision 27462)
@@ -50,4 +50,10 @@
 			checkdefaults	= false; %need to check defaults only if one of the fields does not have its own dimensionality
 			structstoch		= structstochforcing();
+			% Check if hydrolgyarmapw is used
+			if(strcmp(class(md.hydrology),'hydrologyarmapw') && md.transient.ishydrology==1)
+				ispwHydroarma = 1;
+			else
+				ispwHydroarma = 0;
+			end
 			for field=self.fields
 				%Checking agreement of classes
@@ -116,9 +122,8 @@
             end
 				%Checking for specific dimensions
-				if ~(strcmp(field,'SMBarma') || strcmp(field,'FrontalForcingsRignotarma') || strcmp(field,'BasalforcingsDeepwaterMeltingRatearma'))
+				if ~(strcmp(field,'SMBarma') || strcmp(field,'FrontalForcingsRignotarma') || strcmp(field,'BasalforcingsDeepwaterMeltingRatearma') || strcmp(field,'FrontalForcingsSubglacialDischargearma') || ((strcmp(field,'FrictionWaterPressure') && ispwHydroarma)))
 					checkdefaults = true; %field with non-specific dimensionality
 				end
 			end
-
 			%Retrieve all the field dimensionalities
 			dimensions = self.defaultdimension*ones(1,num_fields);
@@ -126,5 +131,8 @@
 			indTFarma  = -1; %about to check for index of FrontalForcingsRignotarma
 			indSdarma  = -1; %about to check for index of SubglacialDischargearma
-			indBDWarma  = -1; %about to check for index of BasalforcingsDeepwaterMeltingRatearma
+			indBDWarma = -1; %about to check for index of BasalforcingsDeepwaterMeltingRatearma
+			indPwarma  = -1; %about to check for index of hydrologyarmapw
+			
+
 			if any(contains(self.fields,'SMBarma'))
 				indSMBarma = find(contains(self.fields,'SMBarma')); %index of SMBarma, now check for consistency with other arma timesteps 
@@ -155,6 +163,14 @@
 				end
 			end
+			if (any(contains(self.fields,'FrictionWaterPressure')) && ispwHydroarma)
+				indPwarma	= find(contains(self.fields,'FrictionWaterPressure')); %index of Pwarma, now check for consistency with other arma timesteps 
+				dimensions(indPwarma) = md.hydrology.num_basins;
+				if(md.hydrology.arma_timestep<self.stochastictimestep)
+					error('hydrologyarmapw cannot have a timestep shorter than stochastictimestep');
+				end
+			end
 			size_tot = sum(dimensions);
 
+			%%% Check consistency between ARMA models %%%
 			if(indSMBarma~=-1 && indTFarma~=-1) %both ARMA models are used: check ARMA time step consistency
 				if(md.smb.arma_timestep~=md.frontalforcings.arma_timestep)
@@ -189,4 +205,12 @@
 				end
 			end
+			if(indSMBarma~=-1 && indPwarma~=-1) %both ARMA models are used: check ARMA time step consistency
+				if(md.smb.arma_timestep~=md.hydrology.arma_timestep)
+					crossentries = reshape(self.covariance(1+sum(dimensions(1:indSMBarma-1)):sum(dimensions(1:indSMBarma)),1+sum(dimensions(1:indPwarma-1)):sum(dimensions(1:indPwarma))),1,[]);
+					if any(crossentries~=0)
+						error('SMBarma and hydrologyarmapw have different arma_timestep and non-zero covariance');
+					end
+				end
+			end
 			if(indSdarma~=-1 && indBDWarma~=-1) %both ARMA models are used: check ARMA time step consistency
 				if(md.frontalforcings.sd_arma_timestep~=md.basalforcings.arma_timestep)
@@ -205,4 +229,30 @@
 				end
 			end
+			if(indTFarma~=-1 && indPwarma~=-1) %both ARMA models are used: check ARMA time step consistency
+				if(md.frontalforcings.arma_timestep~=md.hydrology.arma_timestep)
+					crossentries = reshape(self.covariance(1+sum(dimensions(1:indTFarma-1)):sum(dimensions(1:indTFarma)),1+sum(dimensions(1:indPwarma-1)):sum(dimensions(1:indPwarma))),1,[]);
+					if any(crossentries~=0)
+						error('FrontalForcingsRignotarma and hydrologyarmapw have different arma_timestep and non-zero covariance');
+					end
+				end
+			end
+			if(indSdarma~=-1 && indPwarma~=-1) %both ARMA models are used: check ARMA time step consistency
+				if(md.frontalforcings.sd_arma_timestep~=md.hydrology.arma_timestep)
+					crossentries = reshape(self.covariance(1+sum(dimensions(1:indSdarma-1)):sum(dimensions(1:indSdarma)),1+sum(dimensions(1:indPwarma-1)):sum(dimensions(1:indPwarma))),1,[]);
+					if any(crossentries~=0)
+						error('FrontalForcingsSubglacialDischargearma and hydrologyarmapw have different arma_timestep and non-zero covariance');
+					end
+				end
+			end
+			if(indBDWarma~=-1 && indPwarma~=-1) %both ARMA models are used: check ARMA time step consistency
+				if(md.basalforcings.arma_timestep~=md.hydrology.arma_timestep)
+					crossentries = reshape(self.covariance(1+sum(dimensions(1:indBDWarma-1)):sum(dimensions(1:indBDWarma)),1+sum(dimensions(1:indPwarma-1)):sum(dimensions(1:indPwarma))),1,[]);
+					if any(crossentries~=0)
+						error('BasalforcingsDeepwaterMeltingRatearma and hydrologyarmapw have different arma_timestep and non-zero covariance');
+					end
+				end
+			end
+			%%% End of consistency checks between ARMA models %%%
+
 			md = checkfield(md,'fieldname','stochasticforcing.isstochasticforcing','values',[0 1]);
 			md = checkfield(md,'fieldname','stochasticforcing.fields','numel',num_fields,'cell',1,'values',supportedstochforcings());
@@ -244,4 +294,10 @@
 				end
 
+				% Check if hydrolgyarmapw is used
+				if(strcmp(class(md.hydrology),'hydrologyarmapw') && md.transient.ishydrology==1)
+         	   ispwHydroarma = 1;
+         	else
+         	   ispwHydroarma = 0;
+         	end
 				%Retrieve dimensionality of each field
 				dimensions = self.defaultdimension*ones(1,num_fields);
@@ -261,4 +317,10 @@
 						dimensions(ind) = md.basalforcings.num_basins;
 					end
+					if(strcmp(field,'BasalforcingsDeepwaterMeltingRatearma'))
+						dimensions(ind) = md.basalforcings.num_basins;
+					end
+					if(strcmp(field,'FrictionWaterPressure') && ispwHydroarma)
+                  dimensions(ind) = md.hydrology.num_basins;
+               end
 					ind = ind+1;
 				end
Index: /issm/trunk-jpl/src/m/classes/stochasticforcing.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/stochasticforcing.py	(revision 27461)
+++ /issm/trunk-jpl/src/m/classes/stochasticforcing.py	(revision 27462)
@@ -78,4 +78,9 @@
         checkdefaults = False  # Need to check defaults only if one of the fields does not have its own dimensionality
         structstoch = self.structstochforcing()
+        # Check if hydrologyarmapw is used
+        if((type(md.hydrology).__name__ == 'hydrologyarmapw') and md.transient.hydrology==1):
+            ispwHydroarma = 1
+        else:
+            ispwHydroarma = 0
         for field in self.fields:
             # Checking agreement of classes
@@ -127,5 +132,5 @@
 
             # Checking for specific dimensions
-            if field not in['SMBarma', 'FrontalForcingsRignotarma','BasalforcingsDeepwaterMeltingRatearma']:
+            if ((field not in['SMBarma', 'FrontalForcingsRignotarma','BasalforcingsDeepwaterMeltingRatearma']) and ((field=='FrictionWaterPressure' and ispwHydroarma==True)==False)):
                 checkdefaults = True  # field with non-specific dimensionality
 
@@ -136,4 +141,5 @@
         indSdarma    = -1  # About to check for index of FrontalForcingsSubglacialDischargearma
         indBDWarma   = -1  # About to check for index of BasalforcingsDeepwaterMeltingRatearma
+        indPwarma    = -1  # About to check for index of hydrologyarmapw
         if ('SMBarma' in self.fields):
             indSMBarma = self.fields.index('SMBarma')  # Index of SMBarma, now check for consistency with other timesteps
@@ -156,4 +162,9 @@
             if(md.basalforcings.arma_timestep<self.stochastictimestep):
                 raise TypeError('BasalforcingsDeepwaterMeltingRatearma cannot have a timestep shorter than stochastictimestep')
+        if (('FrictionWaterPressure' in self.fields) and ispwHydroarma):
+            indPwarma = self.fields.index('FrictionWaterPressure')  # Index of Pwarma, now check for consistency with other timesteps
+            dimensions[indPwarma] = md.hydrology.num_basins
+            if(md.hydrology.arma_timestep<self.stochastictimestep):
+                raise TypeError('hydrologyarmapw cannot have a timestep shorter than stochastictimestep')
         size_tot = np.sum(dimensions)
 
@@ -182,5 +193,21 @@
             if((md.frontalforcings.sd_arma_timestep != md.frontalforcings.arma_timestep) and np.any(covsum != 0)):
                 raise IOError('FrontalForcingsSubglacialDischargearma and FrontalForcingsRignotarma have different arma_timestep and non-zero covariance')
-
+        if (indSMBarma != -1 and indPwarma != -1):  # Both ARMA models are used: check ARMA time step consistency
+            covsum = self.covariance[np.sum(dimensions[0:indSMBarma]).astype(int):np.sum(dimensions[0:indSMBarma + 1]).astype(int), np.sum(dimensions[0:indPwarma]).astype(int):np.sum(dimensions[0:indPwarma + 1]).astype(int)]
+            if((md.smb.arma_timestep != md.hydrology.arma_timestep) and np.any(covsum != 0)):
+                raise IOError('SMBarma and hydrologyarmapw have different arma_timestep and non-zero covariance')
+        if (indTFarma != -1 and indPwarma != -1):  # Both ARMA models are used: check ARMA time step consistency
+            covsum = self.covariance[np.sum(dimensions[0:indTFarma]).astype(int):np.sum(dimensions[0:indTFarma + 1]).astype(int), np.sum(dimensions[0:indPwarma]).astype(int):np.sum(dimensions[0:indPwarma + 1]).astype(int)]
+            if((md.frontalforcings.arma_timestep != md.hydrology.arma_timestep) and np.any(covsum != 0)):
+                raise IOError('FrontalForcingsRignotarma and hydrologyarmapw have different arma_timestep and non-zero covariance')
+        if (indSdarma != -1 and indPwarma != -1):  # Both ARMA models are used: check ARMA time step consistency
+            covsum = self.covariance[np.sum(dimensions[0:indSdarma]).astype(int):np.sum(dimensions[0:indSdarma + 1]).astype(int), np.sum(dimensions[0:indPwarma]).astype(int):np.sum(dimensions[0:indPwarma + 1]).astype(int)]
+            if((md.frontalforcings.sd_arma_timestep != md.hydrology.arma_timestep) and np.any(covsum != 0)):
+                raise IOError('FrontalForingsSubglacialDischargearma and hydrologyarmapw have different arma_timestep and non-zero covariance')
+        if (indBDWarma != -1 and indPwarma != -1):  # Both ARMA models are used: check ARMA time step consistency
+            covsum = self.covariance[np.sum(dimensions[0:indBDWarma]).astype(int):np.sum(dimensions[0:indBDWarma + 1]).astype(int), np.sum(dimensions[0:indPwarma]).astype(int):np.sum(dimensions[0:indPwarma + 1]).astype(int)]
+            if((md.smb.arma_timestep != md.hydrology.arma_timestep) and np.any(covsum != 0)):
+                raise IOError('BasalforcingsDeepwaterMeltingRatarma and hydrologyarmapw have different arma_timestep and non-zero covariance')
+ 
 
         md = checkfield(md, 'fieldname', 'stochasticforcing.isstochasticforcing', 'values', [0, 1])
@@ -206,9 +233,14 @@
         if not self.isstochasticforcing:
             return md
-
         else:
             num_fields = len(self.fields)
             if(self.stochastictimestep==0):
                 md.stochasticforcing.stochastictimestep = md.timestepping.time_step #by default: stochastictimestep set to ISSM time step
+            # Check if hydroarmapw is used
+            if((type(md.hydrology).__name__ == 'hydrologyarmapw') and md.transient.hydrology==1):
+                ispwHydroarma = 1
+            else:
+                ispwHydroarma = 0
+
             # Retrieve dimensionality of each field
             dimensions = self.defaultdimension * np.ones((num_fields))
@@ -223,4 +255,6 @@
                 if (field == 'BasalforcingsDeepwaterMeltingRatearma'):
                     dimensions[ind] = md.basalforcings.num_basins
+                if (field == 'FrictionWaterPressure' and ispwHydroarma):
+                    dimensions[ind] = md.hydrology.num_basins
 
             # Scaling covariance matrix (scale column-by-column and row-by-row)
Index: /issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.m
===================================================================
--- /issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.m	(revision 27461)
+++ /issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.m	(revision 27462)
@@ -73,9 +73,9 @@
 		analyses={'EsaAnalysis'};
 	elseif strcmp(solutiontype,'TransientSolution')
-		analyses={'StressbalanceAnalysis','StressbalanceVerticalAnalysis','StressbalanceSIAAnalysis','L2ProjectionBaseAnalysis','ThermalAnalysis','MeltingAnalysis','EnthalpyAnalysis','MasstransportAnalysis','OceantransportAnalysis','HydrologyShaktiAnalysis','HydrologyGladsAnalysis','HydrologyShreveAnalysis','HydrologyTwsAnalysis','HydrologyDCInefficientAnalysis','HydrologyDCEfficientAnalysis','SealevelchangeAnalysis', 'AgeAnalysis'};
+		analyses={'StressbalanceAnalysis','StressbalanceVerticalAnalysis','StressbalanceSIAAnalysis','L2ProjectionBaseAnalysis','ThermalAnalysis','MeltingAnalysis','EnthalpyAnalysis','MasstransportAnalysis','OceantransportAnalysis','HydrologyShaktiAnalysis','HydrologyGladsAnalysis','HydrologyShreveAnalysis','HydrologyTwsAnalysis','HydrologyDCInefficientAnalysis','HydrologyDCEfficientAnalysis','SealevelchangeAnalysis','AgeAnalysis','HydrologyArmapwAnalysis'};
 	elseif strcmp(solutiontype,'SealevelchangeSolution')
 		analyses={'SealevelchangeAnalysis'};
 	elseif strcmp(solutiontype,'HydrologySolution')
-		analyses={'L2ProjectionBaseAnalysis','HydrologyShreveAnalysis','HydrologyDCInefficientAnalysis','HydrologyDCEfficientAnalysis','HydrologyGladsAnalysis','HydrologyShaktiAnalysis','HydrologyTwsAnalysis'};
+		analyses={'L2ProjectionBaseAnalysis','HydrologyShreveAnalysis','HydrologyDCInefficientAnalysis','HydrologyDCEfficientAnalysis','HydrologyGladsAnalysis','HydrologyShaktiAnalysis','HydrologyTwsAnalysis','HydrologyArmapwAnalysis'};
 	elseif strcmp(solutiontype,'DamageEvolutionSolution')
 		analyses={'DamageEvolutionAnalysis'};
