Index: /issm/branches/trunk-larour-SLPS2022/src/c/analyses/MmemasstransportAnalysis.cpp
===================================================================
--- /issm/branches/trunk-larour-SLPS2022/src/c/analyses/MmemasstransportAnalysis.cpp	(revision 27137)
+++ /issm/branches/trunk-larour-SLPS2022/src/c/analyses/MmemasstransportAnalysis.cpp	(revision 27138)
@@ -40,6 +40,6 @@
 	iomodel->FetchDataToInput(inputs,elements,"md.geometry.base",BaseEnum);
 	iomodel->FetchDataToInput(inputs,elements,"md.initialization.sealevel",SealevelEnum,0);
-	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(inputs,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MmemasstransportMaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ocean_levelset",MmemasstransportMaskOceanLevelsetEnum);
 	iomodel->FetchDataToInput(inputs,elements,"md.mmemasstransport.thickness", MmemasstransportThicknessEnum);
 
@@ -99,12 +99,12 @@
 void           MmemasstransportAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
 
-	/*retrieve thickness from MmemasstransportAnalysis spcs in our element:*/
+	/*retrieve thickness, ice and ocean levelsets from MmemasstransportAnalysis inputs in our element:*/
 
-	IssmDouble h;
+	IssmDouble height,ice,ocean;
 	int       *doflist = NULL;
 
 	/*Fetch number of nodes and initialize values*/
 	int         numnodes = element->GetNumberOfNodes();
-	int         numdof   = numnodes;
+	int         numdof   = numnodes*3;
 	IssmDouble* values   = xNew<IssmDouble>(numdof);
 
@@ -112,4 +112,6 @@
 	element->GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
 	Input* h_input=element->GetInput(MmemasstransportThicknessEnum); _assert_(h_input);
+	Input* i_input=element->GetInput(MmemasstransportMaskIceLevelsetEnum); _assert_(i_input);
+	Input* o_input=element->GetInput(MmemasstransportMaskOceanLevelsetEnum); _assert_(o_input);
 
 	/*Ok, we have the thickness in inputs, fill in solution */
@@ -117,6 +119,10 @@
 	for(int i=0;i<numnodes;i++){
 		gauss->GaussVertex(i);
-		h_input->GetInputValue(&h,gauss);
-		values[i+0]=h;
+		h_input->GetInputValue(&height,gauss);
+		i_input->GetInputValue(&ice,gauss);
+		o_input->GetInputValue(&ocean,gauss);
+		values[3*i+0]=height;
+		values[3*i+1]=ice;
+		values[3*i+2]=ocean;
 	}
 
@@ -139,10 +145,12 @@
 	/*Fetch number of nodes and dof for this finite element*/
 	int numnodes = element->GetNumberOfNodes();
-	int numdof   = numnodes;
+	int numdof   = numnodes*3;
 
 	/*Fetch dof list and allocate solution vectors*/
 	element->GetDofListLocal(&doflist,NoneApproximationEnum,GsetEnum);
 	IssmDouble* values    = xNew<IssmDouble>(numdof);
-	IssmDouble* h        = xNew<IssmDouble>(numnodes);
+	IssmDouble* height        = xNew<IssmDouble>(numnodes);
+	IssmDouble* ice        = xNew<IssmDouble>(numnodes);
+	IssmDouble* ocean        = xNew<IssmDouble>(numnodes);
 
 	/*Use the dof list to index into the solution vector: */
@@ -151,16 +159,27 @@
 	/*Retrieve h:*/
 	for(i=0;i<numnodes;i++){
-		h[i]=values[i+0];
+		height[i]=values[3*i+0];
+		ice[i]=values[3*i+1];
+		ocean[i]=values[3*i+2];
 
 		/*Check solution*/
-		if(xIsNan<IssmDouble>(h[i])) _error_("NaN found in ice thickness solution vector");
-		if(xIsInf<IssmDouble>(h[i])) _error_("Inf found in ice thickness solution vector");
+		if(xIsNan<IssmDouble>(height[i])) _error_("NaN found in ice thickness solution vector");
+		if(xIsInf<IssmDouble>(height[i])) _error_("Inf found in ice thickness solution vector");
+		if(xIsNan<IssmDouble>(ice[i])) _error_("NaN found in ice mask solution vector");
+		if(xIsInf<IssmDouble>(ice[i])) _error_("Inf found in ice mask solution vector");
+		if(xIsNan<IssmDouble>(ocean[i])) _error_("NaN found in ocean mask solution vector");
+		if(xIsInf<IssmDouble>(ocean[i])) _error_("Inf found in ocean mask solution vector");
+
 	}
 
-	/*Add thickness as inputs to the tria element: */
-	element->AddInput(ThicknessEnum,h,P1Enum);
+	/*Add thickness ice and ocean levelsets as inputs to the tria element: */
+	element->AddInput(ThicknessEnum,height,P1Enum);
+	element->AddInput(MaskIceLevelsetEnum,ice,P1Enum);
+	element->AddInput(MaskOceanLevelsetEnum,ocean,P1Enum);
 
 	/*Free ressources:*/
-	xDelete<IssmDouble>(h);
+	xDelete<IssmDouble>(height);
+	xDelete<IssmDouble>(ice);
+	xDelete<IssmDouble>(ocean);
 	xDelete<IssmDouble>(values);
 	xDelete<int>(doflist);
Index: /issm/branches/trunk-larour-SLPS2022/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp
===================================================================
--- /issm/branches/trunk-larour-SLPS2022/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp	(revision 27137)
+++ /issm/branches/trunk-larour-SLPS2022/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp	(revision 27138)
@@ -173,9 +173,16 @@
 			MmeToInputx(femmodel,distributed_values,variable_partition,npart,MmemasstransportThicknessEnum, P0Enum);
 
-		if (femmodel->inputs->GetInputObjectEnum(MaskIceLevelsetEnum)==DatasetInputEnum)
-			MmeToInputx(femmodel,distributed_values,variable_partition,npart,MaskIceLevelsetEnum, P1Enum);
-
-		if (femmodel->inputs->GetInputObjectEnum(MaskOceanLevelsetEnum)==DatasetInputEnum)
-			MmeToInputx(femmodel,distributed_values,variable_partition,npart,MaskOceanLevelsetEnum, P1Enum);
+		if (femmodel->inputs->GetInputObjectEnum(MmemasstransportMaskIceLevelsetEnum)==DatasetInputEnum){
+			MmeToInputx(femmodel,distributed_values,variable_partition,npart,MmemasstransportMaskIceLevelsetEnum, P1Enum);
+			/*delete MaskIceLevelsetEnum which will be replaced by MmemasstransportMaskIceLevelsetEnum for each time step: */
+			femmodel->inputs->DeleteInput(MaskIceLevelsetEnum);
+		}
+
+		if (femmodel->inputs->GetInputObjectEnum(MmemasstransportMaskOceanLevelsetEnum)==DatasetInputEnum){
+			MmeToInputx(femmodel,distributed_values,variable_partition,npart,MmemasstransportMaskOceanLevelsetEnum, P1Enum);
+			
+			/*delete MaskOceanLevelsetEnum which will be replaced by MmemasstransportMaskOceanLevelsetEnum for each time step: */
+			femmodel->inputs->DeleteInput(MaskOceanLevelsetEnum);
+		}
 
 	} /*}}}*/
Index: /issm/branches/trunk-larour-SLPS2022/src/c/modules/UpdateMmesx/UpdateMmesx.cpp
===================================================================
--- /issm/branches/trunk-larour-SLPS2022/src/c/modules/UpdateMmesx/UpdateMmesx.cpp	(revision 27137)
+++ /issm/branches/trunk-larour-SLPS2022/src/c/modules/UpdateMmesx/UpdateMmesx.cpp	(revision 27138)
@@ -25,5 +25,5 @@
 
 	} /*}}}*/
-	/*Deal with ocean: {{{*/
+	/*Deal with dsl: {{{*/
 	if (femmodel->inputs->Exist(OceantransportSpcbottompressureEnum) && femmodel->inputs->GetInputObjectEnum(OceantransportSpcbottompressureEnum)==DatasetInputEnum){
 		
@@ -51,9 +51,15 @@
 		MmeToInputx(femmodel,modelids,partition,nids,MmemasstransportThicknessEnum, P0Enum);
 
-		if (femmodel->inputs->GetInputObjectEnum(MaskIceLevelsetEnum)==DatasetInputEnum)
-			MmeToInputx(femmodel,modelids,partition,nids,MaskIceLevelsetEnum, P1Enum);
+		if (femmodel->inputs->GetInputObjectEnum(MmemasstransportMaskIceLevelsetEnum)==DatasetInputEnum){
+			MmeToInputx(femmodel,modelids,partition,nids,MmemasstransportMaskIceLevelsetEnum, P1Enum);
+			/*delete MaskIceLevelsetEnum which will be replaced by MmemasstransportMaskIceLevelsetEnum for each time step: */
+			femmodel->inputs->DeleteInput(MaskIceLevelsetEnum);
+		}
 
-		if (femmodel->inputs->GetInputObjectEnum(MaskOceanLevelsetEnum)==DatasetInputEnum)
-			MmeToInputx(femmodel,modelids,partition,nids,MaskOceanLevelsetEnum, P1Enum);
+		if (femmodel->inputs->GetInputObjectEnum(MmemasstransportMaskOceanLevelsetEnum)==DatasetInputEnum){
+			MmeToInputx(femmodel,modelids,partition,nids,MmemasstransportMaskOceanLevelsetEnum, P1Enum);
+			/*delete MaskOceanLevelsetEnum which will be replaced by MmemasstransportMaskOceanLevelsetEnum for each time step: */
+			femmodel->inputs->DeleteInput(MaskOceanLevelsetEnum);
+		}
 
 		/*free ressources:*/
Index: /issm/branches/trunk-larour-SLPS2022/src/c/shared/Enum/Enum.vim
===================================================================
--- /issm/branches/trunk-larour-SLPS2022/src/c/shared/Enum/Enum.vim	(revision 27137)
+++ /issm/branches/trunk-larour-SLPS2022/src/c/shared/Enum/Enum.vim	(revision 27138)
@@ -811,4 +811,6 @@
 syn keyword cConstant MasstransportSpcthicknessEnum
 syn keyword cConstant MmemasstransportThicknessEnum
+syn keyword cConstant MmemasstransportMaskIceLevelsetEnum
+syn keyword cConstant MmemasstransportMaskOceanLevelsetEnum
 syn keyword cConstant MaterialsRheologyBEnum
 syn keyword cConstant MaterialsRheologyBbarEnum
Index: /issm/branches/trunk-larour-SLPS2022/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/branches/trunk-larour-SLPS2022/src/c/shared/Enum/EnumDefinitions.h	(revision 27137)
+++ /issm/branches/trunk-larour-SLPS2022/src/c/shared/Enum/EnumDefinitions.h	(revision 27138)
@@ -807,4 +807,6 @@
 	MasstransportSpcthicknessEnum,
 	MmemasstransportThicknessEnum,
+	MmemasstransportMaskIceLevelsetEnum,
+	MmemasstransportMaskOceanLevelsetEnum,
 	MaterialsRheologyBEnum,
 	MaterialsRheologyBbarEnum,
Index: /issm/branches/trunk-larour-SLPS2022/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/branches/trunk-larour-SLPS2022/src/c/shared/Enum/EnumToStringx.cpp	(revision 27137)
+++ /issm/branches/trunk-larour-SLPS2022/src/c/shared/Enum/EnumToStringx.cpp	(revision 27138)
@@ -813,4 +813,6 @@
 		case MasstransportSpcthicknessEnum : return "MasstransportSpcthickness";
 		case MmemasstransportThicknessEnum : return "MmemasstransportThickness";
+		case MmemasstransportMaskIceLevelsetEnum : return "MmemasstransportMaskIceLevelset";
+		case MmemasstransportMaskOceanLevelsetEnum : return "MmemasstransportMaskOceanLevelset";
 		case MaterialsRheologyBEnum : return "MaterialsRheologyB";
 		case MaterialsRheologyBbarEnum : return "MaterialsRheologyBbar";
Index: /issm/branches/trunk-larour-SLPS2022/src/c/shared/Enum/Enumjl.vim
===================================================================
--- /issm/branches/trunk-larour-SLPS2022/src/c/shared/Enum/Enumjl.vim	(revision 27137)
+++ /issm/branches/trunk-larour-SLPS2022/src/c/shared/Enum/Enumjl.vim	(revision 27138)
@@ -804,4 +804,6 @@
 syn keyword juliaConstC MasstransportSpcthicknessEnum
 syn keyword juliaConstC MmemasstransportThicknessEnum
+syn keyword juliaConstC MmemasstransportMaskIceLevelsetEnum
+syn keyword juliaConstC MmemasstransportMaskOceanLevelsetEnum
 syn keyword juliaConstC MaterialsRheologyBEnum
 syn keyword juliaConstC MaterialsRheologyBbarEnum
Index: /issm/branches/trunk-larour-SLPS2022/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/branches/trunk-larour-SLPS2022/src/c/shared/Enum/StringToEnumx.cpp	(revision 27137)
+++ /issm/branches/trunk-larour-SLPS2022/src/c/shared/Enum/StringToEnumx.cpp	(revision 27138)
@@ -831,4 +831,6 @@
 	      else if (strcmp(name,"MasstransportSpcthickness")==0) return MasstransportSpcthicknessEnum;
 	      else if (strcmp(name,"MmemasstransportThickness")==0) return MmemasstransportThicknessEnum;
+	      else if (strcmp(name,"MmemasstransportMaskIceLevelset")==0) return MmemasstransportMaskIceLevelsetEnum;
+	      else if (strcmp(name,"MmemasstransportMaskOceanLevelset")==0) return MmemasstransportMaskOceanLevelsetEnum;
 	      else if (strcmp(name,"MaterialsRheologyB")==0) return MaterialsRheologyBEnum;
 	      else if (strcmp(name,"MaterialsRheologyBbar")==0) return MaterialsRheologyBbarEnum;
@@ -873,10 +875,10 @@
 	      else if (strcmp(name,"SamplingBeta")==0) return SamplingBetaEnum;
 	      else if (strcmp(name,"SamplingKappa")==0) return SamplingKappaEnum;
-	      else if (strcmp(name,"SamplingPhi")==0) return SamplingPhiEnum;
-	      else if (strcmp(name,"SamplingTau")==0) return SamplingTauEnum;
          else stage=8;
    }
    if(stage==8){
-	      if (strcmp(name,"Sealevel")==0) return SealevelEnum;
+	      if (strcmp(name,"SamplingPhi")==0) return SamplingPhiEnum;
+	      else if (strcmp(name,"SamplingTau")==0) return SamplingTauEnum;
+	      else if (strcmp(name,"Sealevel")==0) return SealevelEnum;
 	      else if (strcmp(name,"SealevelGRD")==0) return SealevelGRDEnum;
 	      else if (strcmp(name,"SealevelBarystaticMask")==0) return SealevelBarystaticMaskEnum;
@@ -996,10 +998,10 @@
 	      else if (strcmp(name,"SmbEAir")==0) return SmbEAirEnum;
 	      else if (strcmp(name,"SmbEC")==0) return SmbECEnum;
-	      else if (strcmp(name,"SmbECDt")==0) return SmbECDtEnum;
-	      else if (strcmp(name,"SmbECini")==0) return SmbECiniEnum;
          else stage=9;
    }
    if(stage==9){
-	      if (strcmp(name,"SmbEla")==0) return SmbElaEnum;
+	      if (strcmp(name,"SmbECDt")==0) return SmbECDtEnum;
+	      else if (strcmp(name,"SmbECini")==0) return SmbECiniEnum;
+	      else if (strcmp(name,"SmbEla")==0) return SmbElaEnum;
 	      else if (strcmp(name,"SmbEvaporation")==0) return SmbEvaporationEnum;
 	      else if (strcmp(name,"SmbFAC")==0) return SmbFACEnum;
@@ -1119,10 +1121,10 @@
 	      else if (strcmp(name,"TransientAccumulatedDeltaIceThickness")==0) return TransientAccumulatedDeltaIceThicknessEnum;
 	      else if (strcmp(name,"Vel")==0) return VelEnum;
-	      else if (strcmp(name,"VxAverage")==0) return VxAverageEnum;
-	      else if (strcmp(name,"VxBase")==0) return VxBaseEnum;
          else stage=10;
    }
    if(stage==10){
-	      if (strcmp(name,"Vx")==0) return VxEnum;
+	      if (strcmp(name,"VxAverage")==0) return VxAverageEnum;
+	      else if (strcmp(name,"VxBase")==0) return VxBaseEnum;
+	      else if (strcmp(name,"Vx")==0) return VxEnum;
 	      else if (strcmp(name,"VxMesh")==0) return VxMeshEnum;
 	      else if (strcmp(name,"VxObs")==0) return VxObsEnum;
@@ -1242,10 +1244,10 @@
 	      else if (strcmp(name,"Outputdefinition89")==0) return Outputdefinition89Enum;
 	      else if (strcmp(name,"Outputdefinition8")==0) return Outputdefinition8Enum;
-	      else if (strcmp(name,"Outputdefinition90")==0) return Outputdefinition90Enum;
-	      else if (strcmp(name,"Outputdefinition91")==0) return Outputdefinition91Enum;
          else stage=11;
    }
    if(stage==11){
-	      if (strcmp(name,"Outputdefinition92")==0) return Outputdefinition92Enum;
+	      if (strcmp(name,"Outputdefinition90")==0) return Outputdefinition90Enum;
+	      else if (strcmp(name,"Outputdefinition91")==0) return Outputdefinition91Enum;
+	      else if (strcmp(name,"Outputdefinition92")==0) return Outputdefinition92Enum;
 	      else if (strcmp(name,"Outputdefinition93")==0) return Outputdefinition93Enum;
 	      else if (strcmp(name,"Outputdefinition94")==0) return Outputdefinition94Enum;
@@ -1365,10 +1367,10 @@
 	      else if (strcmp(name,"FrontalForcingsDefault")==0) return FrontalForcingsDefaultEnum;
 	      else if (strcmp(name,"FrontalForcingsRignot")==0) return FrontalForcingsRignotEnum;
-	      else if (strcmp(name,"FrontalForcingsRignotAutoregression")==0) return FrontalForcingsRignotAutoregressionEnum;
-	      else if (strcmp(name,"Fset")==0) return FsetEnum;
          else stage=12;
    }
    if(stage==12){
-	      if (strcmp(name,"FullMeltOnPartiallyFloating")==0) return FullMeltOnPartiallyFloatingEnum;
+	      if (strcmp(name,"FrontalForcingsRignotAutoregression")==0) return FrontalForcingsRignotAutoregressionEnum;
+	      else if (strcmp(name,"Fset")==0) return FsetEnum;
+	      else if (strcmp(name,"FullMeltOnPartiallyFloating")==0) return FullMeltOnPartiallyFloatingEnum;
 	      else if (strcmp(name,"GLheightadvectionAnalysis")==0) return GLheightadvectionAnalysisEnum;
 	      else if (strcmp(name,"GaussPenta")==0) return GaussPentaEnum;
@@ -1488,10 +1490,10 @@
 	      else if (strcmp(name,"MinVy")==0) return MinVyEnum;
 	      else if (strcmp(name,"MinVz")==0) return MinVzEnum;
-	      else if (strcmp(name,"MismipFloatingMeltRate")==0) return MismipFloatingMeltRateEnum;
-	      else if (strcmp(name,"Moulin")==0) return MoulinEnum;
          else stage=13;
    }
    if(stage==13){
-	      if (strcmp(name,"MpiDense")==0) return MpiDenseEnum;
+	      if (strcmp(name,"MismipFloatingMeltRate")==0) return MismipFloatingMeltRateEnum;
+	      else if (strcmp(name,"Moulin")==0) return MoulinEnum;
+	      else if (strcmp(name,"MpiDense")==0) return MpiDenseEnum;
 	      else if (strcmp(name,"Mpi")==0) return MpiEnum;
 	      else if (strcmp(name,"MpiSparse")==0) return MpiSparseEnum;
@@ -1611,10 +1613,10 @@
 	      else if (strcmp(name,"ThermalAnalysis")==0) return ThermalAnalysisEnum;
 	      else if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
-	      else if (strcmp(name,"ThicknessErrorEstimator")==0) return ThicknessErrorEstimatorEnum;
-	      else if (strcmp(name,"TotalCalvingFluxLevelset")==0) return TotalCalvingFluxLevelsetEnum;
          else stage=14;
    }
    if(stage==14){
-	      if (strcmp(name,"TotalCalvingMeltingFluxLevelset")==0) return TotalCalvingMeltingFluxLevelsetEnum;
+	      if (strcmp(name,"ThicknessErrorEstimator")==0) return ThicknessErrorEstimatorEnum;
+	      else if (strcmp(name,"TotalCalvingFluxLevelset")==0) return TotalCalvingFluxLevelsetEnum;
+	      else if (strcmp(name,"TotalCalvingMeltingFluxLevelset")==0) return TotalCalvingMeltingFluxLevelsetEnum;
 	      else if (strcmp(name,"TotalFloatingBmb")==0) return TotalFloatingBmbEnum;
 	      else if (strcmp(name,"TotalFloatingBmbScaled")==0) return TotalFloatingBmbScaledEnum;
Index: /issm/branches/trunk-larour-SLPS2022/src/c/shared/Enum/issmenums.jl
===================================================================
--- /issm/branches/trunk-larour-SLPS2022/src/c/shared/Enum/issmenums.jl	(revision 27137)
+++ /issm/branches/trunk-larour-SLPS2022/src/c/shared/Enum/issmenums.jl	(revision 27138)
@@ -800,4 +800,6 @@
 	MasstransportSpcthicknessEnum
 	MmemasstransportThicknessEnum
+	MmemasstransportMaskIceLevelsetEnum
+	MmemasstransportMaskOceanLevelsetEnum
 	MaterialsRheologyBEnum
 	MaterialsRheologyBbarEnum
@@ -2406,4 +2408,6 @@
 	if(enum==MasstransportSpcthicknessEnum) return "MasstransportSpcthickness" end
 	if(enum==MmemasstransportThicknessEnum) return "MmemasstransportThickness" end
+	if(enum==MmemasstransportMaskIceLevelsetEnum) return "MmemasstransportMaskIceLevelset" end
+	if(enum==MmemasstransportMaskOceanLevelsetEnum) return "MmemasstransportMaskOceanLevelset" end
 	if(enum==MaterialsRheologyBEnum) return "MaterialsRheologyB" end
 	if(enum==MaterialsRheologyBbarEnum) return "MaterialsRheologyBbar" end
