Index: /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 22276)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 22277)
@@ -223,5 +223,6 @@
 	/*Retrieve all inputs and parameters*/
 	basalelement->GetVerticesCoordinates(&xyz_list);
-	basalelement->FindParam(&dt,TimesteppingTimeStepEnum);
+	//basalelement->FindParam(&dt,TimesteppingTimeStepEnum);
+	basalelement ->FindParam(&dt,HydrologydcHydrodtEnum);
 
 	Input* epl_thick_input = basalelement->GetInput(HydrologydcEplThicknessEnum); _assert_(epl_thick_input);
@@ -332,5 +333,6 @@
 	/*Retrieve all inputs and parameters*/
 	basalelement->GetVerticesCoordinates(&xyz_list);
-	basalelement->FindParam(&dt,TimesteppingTimeStepEnum);	
+	//basalelement->FindParam(&dt,TimesteppingTimeStepEnum);	
+	basalelement ->FindParam(&dt,HydrologydcHydrodtEnum);
 
 	Input* epl_thick_input = basalelement->GetInput(HydrologydcEplThicknessEnum); _assert_(epl_thick_input);
@@ -555,5 +557,6 @@
 		Input* 	active_element_input=element->GetInput(HydrologydcMaskEplactiveEltEnum); _assert_(active_element_input);		
 		active_element_input->GetInputValue(&active_element);
-		element->FindParam(&dt,TimesteppingTimeStepEnum);
+		//element->FindParam(&dt,TimesteppingTimeStepEnum);
+		element ->FindParam(&dt,HydrologydcHydrodtEnum);
 	
 		/*For now, assuming just one way to compute EPL thickness*/
@@ -725,5 +728,8 @@
 	basalelement->AddInput(HydrologydcEplThicknessEnum,epl_thickness,basalelement->GetElementType());
 
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(domaintype!=Domain2DhorizontalEnum){
+		basalelement->DeleteMaterials(); 
+		delete basalelement;
+	}
 	xDelete<IssmDouble>(epl_thickness);
 	xDelete<IssmDouble>(old_active);
Index: /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 22276)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 22277)
@@ -19,4 +19,6 @@
 	int         penalty_lock;
 	int         hydro_maxiter;
+	int         hydroslices;
+	int         numoutputs;
 	bool        isefficientlayer;
 	IssmDouble  penalty_factor;
@@ -24,4 +26,5 @@
 	IssmDouble  leakagefactor;
 	IssmDouble  sedimentlimit;
+	char**      requestedoutputs = NULL;
 
 	/*retrieve some parameters: */
@@ -33,9 +36,10 @@
 	iomodel->FetchData(&sedimentlimit_flag, "md.hydrology.sedimentlimit_flag" );
 	iomodel->FetchData(&transfer_flag,      "md.hydrology.transfer_flag" );
-	iomodel->FetchData(&unconfined_flag,      "md.hydrology.unconfined_flag" );
+	iomodel->FetchData(&unconfined_flag,    "md.hydrology.unconfined_flag" );
+	iomodel->FetchData(&penalty_lock,       "md.hydrology.penalty_lock" );
+	iomodel->FetchData(&hydro_maxiter,      "md.hydrology.max_iter" );
+	iomodel->FetchData(&hydroslices,        "md.hydrology.steps_per_step");
+	iomodel->FetchData(&isefficientlayer,   "md.hydrology.isefficientlayer");
 	iomodel->FetchData(&penalty_factor,     "md.hydrology.penalty_factor" );
-	iomodel->FetchData(&isefficientlayer,   "md.hydrology.isefficientlayer");
-	iomodel->FetchData(&hydro_maxiter,      "md.hydrology.max_iter" );
-	iomodel->FetchData(&penalty_lock,       "md.hydrology.penalty_lock" );
 	iomodel->FetchData(&rel_tol,            "md.hydrology.rel_tol" );
 
@@ -46,4 +50,6 @@
 	parameters->AddObject(new IntParam(HydrologydcPenaltyLockEnum,penalty_lock));
 	parameters->AddObject(new IntParam(HydrologydcMaxIterEnum,hydro_maxiter));
+	parameters->AddObject(new IntParam(HydrologydcStepsPerStepEnum,hydroslices));
+
 	parameters->AddObject(new BoolParam(HydrologydcIsefficientlayerEnum,isefficientlayer));
 	parameters->AddObject(new DoubleParam(HydrologydcPenaltyFactorEnum,penalty_factor));
@@ -57,4 +63,9 @@
 		parameters->AddObject(new DoubleParam(HydrologydcSedimentlimitEnum,sedimentlimit));
 	}
+  /*Requested outputs*/
+  iomodel->FindConstant(&requestedoutputs,&numoutputs,"md.hydrology.requested_outputs");
+  parameters->AddObject(new IntParam(HydrologyNumRequestedOutputsEnum,numoutputs));
+  if(numoutputs)parameters->AddObject(new StringArrayParam(HydrologyRequestedOutputsEnum,requestedoutputs,numoutputs));
+  iomodel->DeleteData(&requestedoutputs,numoutputs,"md.hydrology.requested_outputs");
 }/*}}}*/
 
@@ -96,4 +107,5 @@
 	if(isefficientlayer){
 		iomodel->FetchDataToInput(elements,"md.hydrology.mask_eplactive_node",HydrologydcMaskEplactiveNodeEnum);
+		iomodel->FetchDataToInput(elements,"md.initialization.epl_head",EplHeadEnum);
 	}
 }/*}}}*/
@@ -209,9 +221,11 @@
 	/*Retrieve all inputs and parameters*/
 	basalelement ->GetVerticesCoordinates(&xyz_list);
-	basalelement ->FindParam(&dt,TimesteppingTimeStepEnum);
+	//basalelement ->FindParam(&dt,TimesteppingTimeStepEnum);
+	basalelement ->FindParam(&dt,HydrologydcHydrodtEnum);
 	basalelement ->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum);
 	Input* SedTrans_input = basalelement->GetInput(HydrologydcSedimentTransmitivityEnum); _assert_(SedTrans_input);
 	Input* sed_head_input = basalelement->GetInput(SedimentHeadEnum);
 	Input* base_input     = basalelement->GetInput(BaseEnum);
+	Input* old_wh_input = basalelement->GetInput(SedimentHeadOldEnum);                  _assert_(old_wh_input);
 
 	/*Transfer related Inputs*/
@@ -232,4 +246,5 @@
 		/*Diffusivity*/
 		D_scalar=sediment_transmitivity*gauss->weight*Jdet;
+		//D_scalar=gauss->weight*Jdet;
 		if(dt!=0.) D_scalar=D_scalar*dt;
 		D[0][0]=D_scalar;
@@ -245,4 +260,5 @@
 			basalelement->NodalFunctions(&basis[0],gauss);
 			D_scalar=sediment_storing*gauss->weight*Jdet;
+			//D_scalar=(sediment_storing/sediment_transmitivity)*gauss->weight*Jdet;
 			TripleMultiply(basis,numnodes,1,0,
 										 &D_scalar,1,1,0,
@@ -257,4 +273,5 @@
 					basalelement->NodalFunctions(&basis[0],gauss);
 					D_scalar=dt*transfer*gauss->weight*Jdet;
+					//D_scalar=dt*(transfer/sediment_transmitivity)*gauss->weight*Jdet;
 					TripleMultiply(basis,numnodes,1,0,
 												 &D_scalar,1,1,0,
@@ -270,5 +287,8 @@
 	xDelete<IssmDouble>(basis);
 	delete gauss;
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(domaintype!=Domain2DhorizontalEnum){
+		basalelement->DeleteMaterials(); 
+		delete basalelement;
+	}
 	return Ke;
 }/*}}}*/
@@ -296,5 +316,5 @@
 	bool       active_element,isefficientlayer;
 	IssmDouble dt,scalar,sediment_storing;
-	IssmDouble water_head;
+	IssmDouble water_head,sediment_transmitivity;
 	IssmDouble water_load,transfer;
 	IssmDouble Jdet;
@@ -313,5 +333,6 @@
 	/*Retrieve all inputs and parameters*/
 	basalelement->GetVerticesCoordinates(&xyz_list);
-	basalelement->FindParam(&dt,TimesteppingTimeStepEnum);
+	//basalelement->FindParam(&dt,TimesteppingTimeStepEnum);
+	basalelement ->FindParam(&dt,HydrologydcHydrodtEnum);
 	basalelement->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum);
 
@@ -320,4 +341,5 @@
 	Input* base_input		  = basalelement->GetInput(BaseEnum);
 	Input* water_input	  = basalelement->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(water_input);
+	Input* SedTrans_input = basalelement->GetInput(HydrologydcSedimentTransmitivityEnum); _assert_(SedTrans_input);
 
 	if(dt!= 0.){
@@ -335,4 +357,5 @@
 		basalelement->JacobianDeterminant(&Jdet,xyz_list,gauss);
 		basalelement->NodalFunctions(basis,gauss);
+		sediment_transmitivity = SedimentTransmitivity(basalelement,gauss,sed_head_input,base_input,SedTrans_input);
 
 		/*Loading term*/
@@ -340,4 +363,5 @@
 			water_input->GetInputValue(&water_load,gauss);
 			scalar = Jdet*gauss->weight*(water_load);
+			//scalar = Jdet*gauss->weight*(water_load)/sediment_transmitivity;
 			if(dt!=0.) scalar = scalar*dt;
 			for(int i=0;i<numnodes;i++){
@@ -351,4 +375,5 @@
 				water_input->GetInputValue(&water_load,gauss);
 				scalar = Jdet*gauss->weight*(water_load);
+				//scalar = Jdet*gauss->weight*(water_load)/sediment_transmitivity;
 				if(dt!=0.) scalar = scalar*dt;
 				for(int i=0;i<numnodes;i++){
@@ -372,8 +397,10 @@
 				}
 				scalar = Jdet*gauss->weight*((water_head*sediment_storing)+(dt*transfer));
+				//scalar = Jdet*gauss->weight*((water_head*sediment_storing)+(dt*transfer))/sediment_transmitivity;
 				for(int i=0;i<numnodes;i++)pe->values[i]+=scalar*basis[i];
 			}
 			else{
 				scalar = Jdet*gauss->weight*(water_head*sediment_storing);
+				//scalar = Jdet*gauss->weight*(water_head*sediment_storing)/sediment_transmitivity;
 				for(int i=0;i<numnodes;i++)pe->values[i]+=scalar*basis[i];
 			}
@@ -384,5 +411,8 @@
 	xDelete<IssmDouble>(basis);
 	delete gauss;
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(domaintype!=Domain2DhorizontalEnum){
+		basalelement->DeleteMaterials(); 
+		delete basalelement;
+	}
 	return pe;
 }/*}}}*/
@@ -470,4 +500,5 @@
 		IssmDouble* thickness = xNew<IssmDouble>(numnodes);
 		IssmDouble* base      = xNew<IssmDouble>(numnodes);
+		IssmDouble* transmitivity = xNew<IssmDouble>(numnodes);
 
 		basalelement->FindParam(&kmax,HydrologySedimentKmaxEnum);
@@ -479,5 +510,5 @@
 		basalelement->GetInputListOnVertices(thickness,ThicknessEnum);
 		basalelement->GetInputListOnVertices(base,BaseEnum);
-
+		basalelement->GetInputListOnVertices(transmitivity,HydrologydcSedimentTransmitivityEnum);
 		kappa=kmax*pow(10.,penalty_factor);
 
@@ -486,4 +517,5 @@
 			if(values[i]>h_max) {
 				residual[i] = kappa*(values[i]-h_max);
+				//residual[i] = kappa*(values[i]-h_max)*transmitivity[i];
 			}
 			else{
@@ -495,4 +527,5 @@
 		}
 		xDelete<IssmDouble>(thickness);
+		xDelete<IssmDouble>(transmitivity);
 		xDelete<IssmDouble>(base);
 	}
@@ -500,6 +533,6 @@
 	/*Add input to the element: */
 	element->AddBasalInput(SedimentHeadEnum,values,P1Enum);
+	element->AddBasalInput(EffectivePressureEnum,pressure,P1Enum);
 	element->AddBasalInput(SedimentHeadResidualEnum,residual,P1Enum);
-	element->AddBasalInput(EffectivePressureEnum,pressure,P1Enum);
 
 	/*Free ressources:*/
@@ -508,5 +541,8 @@
 	xDelete<IssmDouble>(pressure);
 	xDelete<int>(doflist);
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(domaintype!=Domain2DhorizontalEnum){
+		basalelement->DeleteMaterials(); 
+		delete basalelement;
+	}
 }/*}}}*/
 
@@ -520,5 +556,5 @@
 	IssmDouble expfac; 
 	IssmDouble sediment_storing;
-	IssmDouble storing;
+	IssmDouble storing,yield;
 	IssmDouble base_elev,prestep_head,water_sheet;
 	IssmDouble rho_freshwater           = element->GetMaterialParameter(MaterialsRhoFreshwaterEnum);
@@ -538,9 +574,15 @@
 		water_sheet=max(0.0,(prestep_head-(base_elev-sediment_thickness)));
 
+		/* if (water_sheet<sediment_thickness){ */
+		/* 	sediment_storing=rho_freshwater*g*sediment_porosity*sediment_thickness*(water_compressibility+(sediment_compressibility/sediment_porosity)); */
+		/* } */
+		/* else{ */
+		/* 	sediment_storing=sediment_porosity; */
+		/* } */
 		storing=rho_freshwater*g*sediment_porosity*sediment_thickness*(water_compressibility+(sediment_compressibility/sediment_porosity));
-	
-		//	using logistic function for heavyside approximation
+		//using logistic function for heavyside approximation
 		expfac=10.;
-		sediment_storing=sediment_porosity+(storing-sediment_porosity)/(1+exp(-2*expfac*(water_sheet-0.99*sediment_thickness)));
+		yield=sediment_porosity;
+		sediment_storing=yield+(storing-yield)/(1+exp(-2*expfac*(water_sheet-0.99*sediment_thickness)));
 		break;
 	default:
@@ -568,11 +610,11 @@
 		sed_head_input->GetInputValue(&prestep_head,gauss);
 		water_sheet=max(0.0,(prestep_head-(base_elev-sediment_thickness)));
-
-		if (water_sheet<=sediment_thickness){
-			sediment_transmitivity=FullLayer_transmitivity*water_sheet/sediment_thickness;
-		}
-		else{
-			sediment_transmitivity=FullLayer_transmitivity;
-		}
+		
+		//min definition of the if test
+		sediment_transmitivity=FullLayer_transmitivity*min(water_sheet/sediment_thickness,1.);
+		if (sediment_transmitivity==0){
+			sediment_transmitivity=1.0e-20;
+		}
+
 		break;
 	default:
@@ -632,5 +674,5 @@
 	case 1:
 		element->FindParam(&leakage,HydrologydcLeakageFactorEnum);
-		transfer=leakage; 
+		transfer=+leakage; 
 		break;
 	default:
@@ -656,6 +698,9 @@
 		_assert_(epl_head_input);
 		epl_head_input->GetInputValue(&epl_head,gauss);
+		if (element->Id()==42){
+			printf("epl head in sed Pvec transfer is %f\n",epl_head);
+		}
 		element->FindParam(&leakage,HydrologydcLeakageFactorEnum);
-		transfer=epl_head*leakage;
+		transfer=+epl_head*leakage;
 		break;
 	default:
Index: /issm/trunk-jpl/src/c/classes/Elements/Element.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22276)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22277)
@@ -1773,5 +1773,5 @@
 				name==HydrologydcMaskEplactiveNodeEnum ||
 				name==HydrologyHeadEnum ||
-	         name==HydrologyHeadOldEnum ||		
+				name==HydrologyHeadOldEnum ||		
 				name==StressbalanceConvergenceNumStepsEnum || 
 				name==MeshVertexonbaseEnum || 
Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 22276)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 22277)
@@ -4458,4 +4458,82 @@
 }
 /*}}}*/
+void FemModel::InitTransientOutputx(int* input_enum,int numoutputs){ /*{{{*/
+
+  for(int i=0;i<numoutputs;i++){
+		if(input_enum[i]<0){
+			_error_("Can't deal with non enum fields for result Stack");
+		}
+		else{
+			for(int j=0;j<elements->Size();j++){
+				TransientInput* transient_input = new TransientInput(input_enum[i]);
+				/*Intermediaries*/
+				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(j));
+				transient_input->Configure(element->parameters);
+				element->inputs->AddInput(transient_input);
+			}
+		}
+	}
+}
+/*}}}*/
+void FemModel::StackTransientOutputx(int* input_enum,IssmDouble hydrotime,int numoutputs){ /*{{{*/
+
+  for(int i=0;i<numoutputs;i++){
+		if(input_enum[i]<0){
+			_error_("Can't deal with non enum fields for result Stack");
+		}
+		else{
+			for(int j=0;j<elements->Size();j++){
+				/*Intermediaries*/
+				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(j));
+				TransientInput* stacking_input=NULL;
+				Input* input=element->inputs->GetInput(HydrologydcStackedNEnum); _assert_(input);
+				Input* input_to_stack=element->GetInput(input_enum[i]); _assert_(input_to_stack);
+				stacking_input=dynamic_cast<TransientInput*>(input);
+
+				int  numvertices = element->GetNumberOfVertices();
+				IssmDouble* N=xNew<IssmDouble>(numvertices);
+				element->GetInputListOnVertices(&N[0],input_enum[i]);
+				switch(element->ObjectEnum()){
+				case TriaEnum:
+					stacking_input->AddTimeInput(new TriaInput(HydrologydcStackedNEnum,&N[0],P1Enum),hydrotime);
+					break;
+				case PentaEnum:
+					stacking_input->AddTimeInput(new PentaInput(HydrologydcStackedNEnum,&N[0],P1Enum),hydrotime);
+					break;
+				case TetraEnum:
+					stacking_input->AddTimeInput(new TetraInput(HydrologydcStackedNEnum,&N[0],P1Enum),hydrotime);
+					break;
+				default: _error_("Not implemented yet");
+				}
+				xDelete<IssmDouble>(N);
+			}
+		}
+	}
+}
+/*}}}*/
+void FemModel::AverageTransientOutputx(int* input_enum,IssmDouble init_time,int numoutputs){ /*{{{*/
+	IssmDouble* time_averaged=NULL;
+  for(int i=0;i<numoutputs;i++){
+		if(input_enum[i]<0){
+			_error_("Can't deal with non enum fields for result Stack");
+		}
+		else{
+			for(int j=0;j<elements->Size();j++){
+				/*Intermediaries*/
+				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(j));
+				int  numvertices = element->GetNumberOfVertices();
+				//xNew<IssmDouble>(numvertices);
+
+				Input* input=element->inputs->GetInput(input_enum[i]); _assert_(input);
+				TransientInput* stacking_input=NULL;
+				stacking_input=dynamic_cast<TransientInput*>(input);
+				stacking_input->GetInputAverageOnTimes(&time_averaged, init_time);
+
+				element->AddInput(TimeAverageEffectivePressureEnum,time_averaged,P1Enum);
+			}
+		}
+	}
+}
+/*}}}*/
 #ifdef _HAVE_JAVASCRIPT_ 
 FemModel::FemModel(IssmDouble* buffer, int buffersize, char* toolkits, char* solution, char* modelname,ISSM_MPI_Comm incomm, bool trace){ /*{{{*/
Index: /issm/trunk-jpl/src/c/classes/FemModel.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.h	(revision 22276)
+++ /issm/trunk-jpl/src/c/classes/FemModel.h	(revision 22277)
@@ -149,4 +149,7 @@
 		void UpdateConstraintsExtrudeFromTopx();
 		void UpdateConstraintsL2ProjectionEPLx(IssmDouble* pL2count);
+		void InitTransientOutputx(int* input_enum, int numoutputs);
+		void StackTransientOutputx(int* input_enum, IssmDouble hydrotime, int numoutputs);
+		void AverageTransientOutputx(int* input_enum,IssmDouble hydrotime,int numoutputs);
 		void UpdateConstraintsx(void);
 		int  UpdateVertexPositionsx(void);
Index: /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 22276)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 22277)
@@ -272,6 +272,6 @@
 
 	int         i;
-	IssmDouble *times  = NULL;
-	IssmDouble *values = NULL;
+	IssmDouble* times  = NULL;
+	IssmDouble* values = NULL;
 	int         numsteps;
 	bool        iscurrenttime_included = false;
@@ -291,7 +291,5 @@
 
 	for(i=0;i<numsteps;i++){
-
 		if((iscurrenttime_included==false) && (i==(numsteps-1))){
-
 			/*Retrieve interpolated values for current time step: */
 			Input* input=GetTimeInput(currenttime);
@@ -311,4 +309,31 @@
 }
 /*}}}*/
+void TransientInput::GetInputAverageOnTimes(IssmDouble** pvalues, IssmDouble init_time){/*{{{*/
+
+	IssmDouble  time;
+	IssmDouble  preceding_time;
+	IssmDouble  values[3] = {0.0,0.0,0.0};
+
+	for(int i=0;i<this->numtimesteps;i++){
+		time						 = this->timesteps[i];
+		if(i==0){
+			preceding_time = init_time;
+		}
+		else{
+			preceding_time = this->timesteps[i-1];
+		}
+		TriaInput*	input		 = (TriaInput*)this->inputs->GetObjectByOffset(i); _assert_(input);
+		int					numnodes = input->NumberofNodes(input->interpolation_type);
+		for(int j=0;j<numnodes;j++){
+			values[j]+=(input->values[j]*(time-preceding_time));
+		}
+	}
+	for(int j	=	0;j<3;j++){
+		values[j]/=(this->timesteps[this->numtimesteps-1]-init_time);
+		//printf("final value is %e\n",values[j]);
+	}
+	*pvalues=values;
+}
+/*}}}*/
 
 /*Intermediary*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 22276)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 22277)
@@ -64,4 +64,5 @@
 		void GetInputValue(IssmDouble* pvalue,Gauss* gauss ,int index){_error_("not implemented yet");};
 		void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime);
+		void GetInputAverageOnTimes(IssmDouble** pvalues, IssmDouble init_time);
 		int  GetInputInterpolationType(){_error_("not implemented yet!");};
 		IssmDouble  GetTimeByOffset(int offset);
Index: /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 22276)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 22277)
@@ -223,4 +223,5 @@
 }
 /*}}}*/
+
 void TriaInput::GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){/*{{{*/
 
Index: /issm/trunk-jpl/src/c/cores/hydrology_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/hydrology_core.cpp	(revision 22276)
+++ /issm/trunk-jpl/src/c/cores/hydrology_core.cpp	(revision 22277)
@@ -14,4 +14,5 @@
 	/*intermediary*/
 	int  hydrology_model;
+	int  solution_type;
 	bool save_results;
 	bool modify_loads=true;
@@ -21,5 +22,6 @@
 	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
 	femmodel->parameters->FindParam(&hydrology_model,HydrologyModelEnum);
-	
+	femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);	
+
 	if(VerboseSolution()) _printf0_("   computing water heads\n");
 			
@@ -52,29 +54,74 @@
 	/*Using the double continuum model*/
 	else if (hydrology_model==HydrologydcEnum){
-		InputDuplicatex(femmodel,SedimentHeadEnum,SedimentHeadOldEnum);
-		femmodel->parameters->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum);
-		if (isefficientlayer){
-			InputDuplicatex(femmodel,EplHeadEnum,EplHeadOldEnum);
-			InputDuplicatex(femmodel,HydrologydcEplThicknessEnum,HydrologydcEplThicknessOldEnum);
+		/*intermediary: */
+		int        step,hydroslices;
+		int        numoutputs;
+		char       **requested_outputs = NULL;
+		IssmDouble time,init_time,hydrotime,yts;
+		IssmDouble dt,hydrodt;
+
+		femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
+		femmodel->parameters->FindParam(&step,StepEnum);
+		femmodel->parameters->FindParam(&time,TimeEnum);
+		femmodel->parameters->FindParam(&hydroslices,HydrologydcStepsPerStepEnum);
+		femmodel->parameters->FindParam(&yts,ConstantsYtsEnum);
+		init_time = time-dt; //getting the time back to the start of the timestep
+		hydrotime=init_time;
+		hydrodt=dt/hydroslices; //computing hydro dt from dt and a divider
+		femmodel->parameters->AddObject(new DoubleParam(HydrologydcHydrodtEnum,hydrodt));
+		femmodel->parameters->FindParam(&numoutputs,HydrologyNumRequestedOutputsEnum);
+		if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,HydrologyRequestedOutputsEnum);
+
+		if(dt>0){
+			if(hydroslices>1){
+				int trans_input[1]={HydrologydcStackedNEnum};
+				femmodel->InitTransientOutputx(&trans_input[0],1);
+			}
+			while(hydrotime<time-(yts*DBL_EPSILON)){ //loop on hydro dts
+				hydrotime+=hydrodt;
+				InputDuplicatex(femmodel,SedimentHeadEnum,SedimentHeadOldEnum);
+				femmodel->parameters->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+				if (isefficientlayer){
+					InputDuplicatex(femmodel,EplHeadEnum,EplHeadOldEnum);
+					InputDuplicatex(femmodel,HydrologydcEplThicknessEnum,HydrologydcEplThicknessOldEnum);
+				}
+				/*Proceed now to heads computations*/
+				solutionsequence_hydro_nonlinear(femmodel);
+				if (hydroslices>1){
+					int output[1]={EffectivePressureEnum};
+					femmodel->StackTransientOutputx(&output[0],hydrotime,1);
+				}
+			}
+			if(hydroslices>1){
+				int output[1]={HydrologydcStackedNEnum};
+				femmodel->AverageTransientOutputx(&output[0],init_time,1);
+			}		
 		}
-		
-		/*Proceed now to heads computations*/
-		solutionsequence_hydro_nonlinear(femmodel);
-
+		else{
+			InputDuplicatex(femmodel,SedimentHeadEnum,SedimentHeadOldEnum);
+			femmodel->parameters->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum);
+			if (isefficientlayer){
+				InputDuplicatex(femmodel,EplHeadEnum,EplHeadOldEnum);
+				InputDuplicatex(femmodel,HydrologydcEplThicknessEnum,HydrologydcEplThicknessOldEnum);
+			}
+			/*Proceed now to heads computations*/
+			solutionsequence_hydro_nonlinear(femmodel);
+		}
 		if(save_results){
 			if(VerboseSolution()) _printf0_("   saving results \n");
-			if(isefficientlayer){
-				int outputs[9] = {SedimentHeadEnum,SedimentHeadResidualEnum,EplHeadEnum,HydrologydcMaskEplactiveNodeEnum,HydrologydcMaskEplactiveEltEnum,EplHeadSlopeXEnum,EplHeadSlopeYEnum,HydrologydcEplThicknessEnum,EffectivePressureEnum};
-				femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],9);
-			}
-			else{
-				int outputs[3] = {SedimentHeadEnum,SedimentHeadResidualEnum,EffectivePressureEnum};
-				femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],3);
-			}
-			/*unload results*/
-			if(VerboseSolution()) _printf0_("   saving temporary results\n");
-			OutputResultsx(femmodel);
+			femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
+			/*unload results removed 23/11 needs checking*/
+			/* if(VerboseSolution()) _printf0_("   saving temporary results\n"); */
+			/* OutputResultsx(femmodel); */
+		}
+		/*Free ressources:*/	
+		if(numoutputs){
+			for(int i=0;i<numoutputs;i++){
+				xDelete<char>(requested_outputs[i]);
+			} 
+			xDelete<char*>(requested_outputs);
 		}
 	}
+	
 
 	else if (hydrology_model==HydrologysommersEnum){	
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22276)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22277)
@@ -131,8 +131,13 @@
 	HydrologyshreveStabilizationEnum,
 	HydrologydcEnum,
+	HydrologyNumRequestedOutputsEnum,
+	HydrologyRequestedOutputsEnum,
+	HydrologydcHydrodtEnum,
+	HydrologydcStepsPerStepEnum,
 	SedimentHeadEnum,
 	SedimentHeadOldEnum,
 	SedimentHeadResidualEnum,
 	EffectivePressureEnum,
+	TimeAverageEffectivePressureEnum,
 	EplHeadEnum,
 	EplHeadOldEnum,
@@ -140,4 +145,6 @@
 	EplHeadSlopeYEnum,
 	EplZigZagCounterEnum,
+	MeanEffectivePressureEnum,
+	HydrologydcStackedNEnum,
 	HydrologydcMaxIterEnum,
 	HydrologydcRelTolEnum,
@@ -182,5 +189,5 @@
 	HydrologyReynoldsEnum,
 	HydrologyNeumannfluxEnum,
-   HydrologyRelaxationEnum,
+	HydrologyRelaxationEnum,
 	HydrologyBasalFluxEnum,
 	HydrologyStorageEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22276)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22277)
@@ -137,8 +137,13 @@
 		case HydrologyshreveStabilizationEnum : return "HydrologyshreveStabilization";
 		case HydrologydcEnum : return "Hydrologydc";
+		case HydrologyNumRequestedOutputsEnum : return "HydrologyNumRequestedOutputs";
+		case HydrologyRequestedOutputsEnum : return "HydrologyRequestedOutputs";
+		case HydrologydcHydrodtEnum : return "HydrologydcHydrodt";
+		case HydrologydcStepsPerStepEnum : return "HydrologydcStepsPerStep";
 		case SedimentHeadEnum : return "SedimentHead";
 		case SedimentHeadOldEnum : return "SedimentHeadOld";
 		case SedimentHeadResidualEnum : return "SedimentHeadResidual";
 		case EffectivePressureEnum : return "EffectivePressure";
+		case TimeAverageEffectivePressureEnum : return "TimeAverageEffectivePressure";
 		case EplHeadEnum : return "EplHead";
 		case EplHeadOldEnum : return "EplHeadOld";
@@ -146,4 +151,6 @@
 		case EplHeadSlopeYEnum : return "EplHeadSlopeY";
 		case EplZigZagCounterEnum : return "EplZigZagCounter";
+		case MeanEffectivePressureEnum : return "MeanEffectivePressure";
+		case HydrologydcStackedNEnum : return "HydrologydcStackedN";
 		case HydrologydcMaxIterEnum : return "HydrologydcMaxIter";
 		case HydrologydcRelTolEnum : return "HydrologydcRelTol";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22276)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22277)
@@ -140,8 +140,13 @@
    }
    if(stage==2){
-	      if (strcmp(name,"SedimentHead")==0) return SedimentHeadEnum;
+	      if (strcmp(name,"HydrologyNumRequestedOutputs")==0) return HydrologyNumRequestedOutputsEnum;
+	      else if (strcmp(name,"HydrologyRequestedOutputs")==0) return HydrologyRequestedOutputsEnum;
+	      else if (strcmp(name,"HydrologydcHydrodt")==0) return HydrologydcHydrodtEnum;
+	      else if (strcmp(name,"HydrologydcStepsPerStep")==0) return HydrologydcStepsPerStepEnum;
+	      else if (strcmp(name,"SedimentHead")==0) return SedimentHeadEnum;
 	      else if (strcmp(name,"SedimentHeadOld")==0) return SedimentHeadOldEnum;
 	      else if (strcmp(name,"SedimentHeadResidual")==0) return SedimentHeadResidualEnum;
 	      else if (strcmp(name,"EffectivePressure")==0) return EffectivePressureEnum;
+	      else if (strcmp(name,"TimeAverageEffectivePressure")==0) return TimeAverageEffectivePressureEnum;
 	      else if (strcmp(name,"EplHead")==0) return EplHeadEnum;
 	      else if (strcmp(name,"EplHeadOld")==0) return EplHeadOldEnum;
@@ -149,4 +154,6 @@
 	      else if (strcmp(name,"EplHeadSlopeY")==0) return EplHeadSlopeYEnum;
 	      else if (strcmp(name,"EplZigZagCounter")==0) return EplZigZagCounterEnum;
+	      else if (strcmp(name,"MeanEffectivePressure")==0) return MeanEffectivePressureEnum;
+	      else if (strcmp(name,"HydrologydcStackedN")==0) return HydrologydcStackedNEnum;
 	      else if (strcmp(name,"HydrologydcMaxIter")==0) return HydrologydcMaxIterEnum;
 	      else if (strcmp(name,"HydrologydcRelTol")==0) return HydrologydcRelTolEnum;
@@ -253,5 +260,8 @@
 	      else if (strcmp(name,"DamageHealing")==0) return DamageHealingEnum;
 	      else if (strcmp(name,"DamageStressThreshold")==0) return DamageStressThresholdEnum;
-	      else if (strcmp(name,"DamageKappa")==0) return DamageKappaEnum;
+         else stage=3;
+   }
+   if(stage==3){
+	      if (strcmp(name,"DamageKappa")==0) return DamageKappaEnum;
 	      else if (strcmp(name,"DamageStabilization")==0) return DamageStabilizationEnum;
 	      else if (strcmp(name,"DamageMaxiter")==0) return DamageMaxiterEnum;
@@ -260,8 +270,5 @@
 	      else if (strcmp(name,"DamageEvolutionNumRequestedOutputs")==0) return DamageEvolutionNumRequestedOutputsEnum;
 	      else if (strcmp(name,"DamageEvolutionRequestedOutputs")==0) return DamageEvolutionRequestedOutputsEnum;
-         else stage=3;
-   }
-   if(stage==3){
-	      if (strcmp(name,"Damage")==0) return DamageEnum;
+	      else if (strcmp(name,"Damage")==0) return DamageEnum;
 	      else if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
 	      else if (strcmp(name,"StressIntensityFactor")==0) return StressIntensityFactorEnum;
@@ -376,5 +383,8 @@
 	      else if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum;
 	      else if (strcmp(name,"TimesteppingTimeStep")==0) return TimesteppingTimeStepEnum;
-	      else if (strcmp(name,"TimesteppingInterpForcings")==0) return TimesteppingInterpForcingsEnum;
+         else stage=4;
+   }
+   if(stage==4){
+	      if (strcmp(name,"TimesteppingInterpForcings")==0) return TimesteppingInterpForcingsEnum;
 	      else if (strcmp(name,"TransientIssmb")==0) return TransientIssmbEnum;
 	      else if (strcmp(name,"TransientIscoupler")==0) return TransientIscouplerEnum;
@@ -383,8 +393,5 @@
 	      else if (strcmp(name,"TransientIsmasstransport")==0) return TransientIsmasstransportEnum;
 	      else if (strcmp(name,"TransientIsthermal")==0) return TransientIsthermalEnum;
-         else stage=4;
-   }
-   if(stage==4){
-	      if (strcmp(name,"TransientIsgia")==0) return TransientIsgiaEnum;
+	      else if (strcmp(name,"TransientIsgia")==0) return TransientIsgiaEnum;
 	      else if (strcmp(name,"TransientIsesa")==0) return TransientIsesaEnum;
 	      else if (strcmp(name,"TransientIsdamageevolution")==0) return TransientIsdamageevolutionEnum;
@@ -499,5 +506,8 @@
 	      else if (strcmp(name,"SmbAccumulation")==0) return SmbAccumulationEnum;
 	      else if (strcmp(name,"SmbEvaporation")==0) return SmbEvaporationEnum;
-	      else if (strcmp(name,"SmbRunoff")==0) return SmbRunoffEnum;
+         else stage=5;
+   }
+   if(stage==5){
+	      if (strcmp(name,"SmbRunoff")==0) return SmbRunoffEnum;
 	      else if (strcmp(name,"SMBmeltcomponents")==0) return SMBmeltcomponentsEnum;
 	      else if (strcmp(name,"SmbMelt")==0) return SmbMeltEnum;
@@ -506,8 +516,5 @@
 	      else if (strcmp(name,"SMBgradientsela")==0) return SMBgradientselaEnum;
 	      else if (strcmp(name,"SmbEla")==0) return SmbElaEnum;
-         else stage=5;
-   }
-   if(stage==5){
-	      if (strcmp(name,"SmbBMax")==0) return SmbBMaxEnum;
+	      else if (strcmp(name,"SmbBMax")==0) return SmbBMaxEnum;
 	      else if (strcmp(name,"SmbBMin")==0) return SmbBMinEnum;
 	      else if (strcmp(name,"Adjointp")==0) return AdjointpEnum;
@@ -622,5 +629,8 @@
 	      else if (strcmp(name,"WaterColumnOld")==0) return WaterColumnOldEnum;
 	      else if (strcmp(name,"SurfaceObservation")==0) return SurfaceObservationEnum;
-	      else if (strcmp(name,"WeightsSurfaceObservation")==0) return WeightsSurfaceObservationEnum;
+         else stage=6;
+   }
+   if(stage==6){
+	      if (strcmp(name,"WeightsSurfaceObservation")==0) return WeightsSurfaceObservationEnum;
 	      else if (strcmp(name,"Outputdefinition")==0) return OutputdefinitionEnum;
 	      else if (strcmp(name,"Outputdefinition1")==0) return Outputdefinition1Enum;
@@ -629,8 +639,5 @@
 	      else if (strcmp(name,"Outputdefinition4")==0) return Outputdefinition4Enum;
 	      else if (strcmp(name,"Outputdefinition5")==0) return Outputdefinition5Enum;
-         else stage=6;
-   }
-   if(stage==6){
-	      if (strcmp(name,"Outputdefinition6")==0) return Outputdefinition6Enum;
+	      else if (strcmp(name,"Outputdefinition6")==0) return Outputdefinition6Enum;
 	      else if (strcmp(name,"Outputdefinition7")==0) return Outputdefinition7Enum;
 	      else if (strcmp(name,"Outputdefinition8")==0) return Outputdefinition8Enum;
@@ -745,5 +752,8 @@
 	      else if (strcmp(name,"SubelementMigration")==0) return SubelementMigrationEnum;
 	      else if (strcmp(name,"SubelementMigration2")==0) return SubelementMigration2Enum;
-	      else if (strcmp(name,"SubelementMigration3")==0) return SubelementMigration3Enum;
+         else stage=7;
+   }
+   if(stage==7){
+	      if (strcmp(name,"SubelementMigration3")==0) return SubelementMigration3Enum;
 	      else if (strcmp(name,"Contact")==0) return ContactEnum;
 	      else if (strcmp(name,"GroundingOnly")==0) return GroundingOnlyEnum;
@@ -752,8 +762,5 @@
 	      else if (strcmp(name,"Colinear")==0) return ColinearEnum;
 	      else if (strcmp(name,"ControlSteady")==0) return ControlSteadyEnum;
-         else stage=7;
-   }
-   if(stage==7){
-	      if (strcmp(name,"Fset")==0) return FsetEnum;
+	      else if (strcmp(name,"Fset")==0) return FsetEnum;
 	      else if (strcmp(name,"Gradient1")==0) return Gradient1Enum;
 	      else if (strcmp(name,"Gradient2")==0) return Gradient2Enum;
@@ -868,5 +875,8 @@
 	      else if (strcmp(name,"AmrRestart")==0) return AmrRestartEnum;
 	      else if (strcmp(name,"AmrNeopz")==0) return AmrNeopzEnum;
-	      else if (strcmp(name,"AmrLevelMax")==0) return AmrLevelMaxEnum;
+         else stage=8;
+   }
+   if(stage==8){
+	      if (strcmp(name,"AmrLevelMax")==0) return AmrLevelMaxEnum;
 	      else if (strcmp(name,"AmrLag")==0) return AmrLagEnum;
 	      else if (strcmp(name,"AmrBamg")==0) return AmrBamgEnum;
@@ -875,8 +885,5 @@
 	      else if (strcmp(name,"AmrField")==0) return AmrFieldEnum;
 	      else if (strcmp(name,"AmrErr")==0) return AmrErrEnum;
-         else stage=8;
-   }
-   if(stage==8){
-	      if (strcmp(name,"AmrKeepMetric")==0) return AmrKeepMetricEnum;
+	      else if (strcmp(name,"AmrKeepMetric")==0) return AmrKeepMetricEnum;
 	      else if (strcmp(name,"AmrGradation")==0) return AmrGradationEnum;
 	      else if (strcmp(name,"AmrGroundingLineResolution")==0) return AmrGroundingLineResolutionEnum;
@@ -991,5 +998,8 @@
 	      else if (strcmp(name,"FreeSurfaceBaseAnalysis")==0) return FreeSurfaceBaseAnalysisEnum;
 	      else if (strcmp(name,"FreeSurfaceTopAnalysis")==0) return FreeSurfaceTopAnalysisEnum;
-	      else if (strcmp(name,"ExtrudeFromBaseAnalysis")==0) return ExtrudeFromBaseAnalysisEnum;
+         else stage=9;
+   }
+   if(stage==9){
+	      if (strcmp(name,"ExtrudeFromBaseAnalysis")==0) return ExtrudeFromBaseAnalysisEnum;
 	      else if (strcmp(name,"ExtrudeFromTopAnalysis")==0) return ExtrudeFromTopAnalysisEnum;
 	      else if (strcmp(name,"DepthAverageAnalysis")==0) return DepthAverageAnalysisEnum;
@@ -998,8 +1008,5 @@
 	      else if (strcmp(name,"SteadystateSolution")==0) return SteadystateSolutionEnum;
 	      else if (strcmp(name,"SurfaceSlopeSolution")==0) return SurfaceSlopeSolutionEnum;
-         else stage=9;
-   }
-   if(stage==9){
-	      if (strcmp(name,"SmoothAnalysis")==0) return SmoothAnalysisEnum;
+	      else if (strcmp(name,"SmoothAnalysis")==0) return SmoothAnalysisEnum;
 	      else if (strcmp(name,"ThermalAnalysis")==0) return ThermalAnalysisEnum;
 	      else if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
