Index: /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 19199)
+++ /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 19200)
@@ -180,5 +180,4 @@
 			iomodel->Constant(&isdelta18o,SurfaceforcingsIsdelta18oEnum);
 			iomodel->Constant(&ismungsm,SurfaceforcingsIsmungsmEnum);
-			iomodel->Constant(&isd18opd,SurfaceforcingsIsd18opdEnum);
 			iomodel->FetchDataToInput(elements,ThermalSpctemperatureEnum);
 			if(isdelta18o || ismungsm){
@@ -188,12 +187,18 @@
 				iomodel->FetchDataToInput(elements,SurfaceforcingsPrecipitationsLgmEnum);
 			}
-			else if (isd18opd){
-			        iomodel->FetchDataToInput(elements,SurfaceforcingsTemperaturesPresentdayEnum);
-			        iomodel->FetchDataToInput(elements,SurfaceforcingsPrecipitationsPresentdayEnum);
-			}
 			else{
 			        iomodel->FetchDataToInput(elements,SurfaceforcingsPrecipitationEnum);
 				iomodel->FetchDataToInput(elements,SurfaceforcingsMonthlytemperaturesEnum);
 			}
+			break;
+		case SMBd18opddEnum:
+			iomodel->Constant(&ismungsm,SurfaceforcingsIsmungsmEnum);
+			iomodel->Constant(&isd18opd,SurfaceforcingsIsd18opdEnum);
+			iomodel->FetchDataToInput(elements,ThermalSpctemperatureEnum);
+			if (isd18opd){
+			        iomodel->FetchDataToInput(elements,SurfaceforcingsTemperaturesPresentdayEnum);
+			        iomodel->FetchDataToInput(elements,SurfaceforcingsPrecipitationsPresentdayEnum);
+			}
+
 			break;
 		case SMBgradientsEnum:
Index: /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 19199)
+++ /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 19200)
@@ -26,4 +26,5 @@
 		iomodel->Constant(&smb_model,SurfaceforcingsEnum);
 		if(smb_model==SMBpddEnum) isdynamic=true;
+		if(smb_model==SMBd18opddEnum) isdynamic=true;
 	}
 	else{
Index: /issm/trunk-jpl/src/c/classes/Materials/Matpar.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Materials/Matpar.cpp	(revision 19199)
+++ /issm/trunk-jpl/src/c/classes/Materials/Matpar.cpp	(revision 19200)
@@ -55,7 +55,14 @@
 					iomodel->Constant(&this->rlaps,SurfaceforcingsRlapsEnum);
 					iomodel->Constant(&this->rlapslgm,SurfaceforcingsRlapslgmEnum);
-					// iomodel->Constant(&this->dpermil,SurfaceforcingsDpermilEnum);					
-					break;
+					break;
+				case SMBd18opddEnum:
+					iomodel->Constant(&this->desfac,SurfaceforcingsDesfacEnum);
+					iomodel->Constant(&this->s0p,SurfaceforcingsS0pEnum);
+					iomodel->Constant(&this->s0t,SurfaceforcingsS0tEnum);
+					iomodel->Constant(&this->rlaps,SurfaceforcingsRlapsEnum);
+					iomodel->Constant(&this->rlapslgm,SurfaceforcingsRlapslgmEnum);
+					iomodel->Constant(&this->dpermil,SurfaceforcingsDpermilEnum);					
 				case SMBgradientsEnum:
+					break;
 					/*Nothing to add*/
 					break;
@@ -135,5 +142,5 @@
 	_printf_("   rlaps: " << rlaps << "\n");
 	_printf_("   rlapslgm: " << rlapslgm << "\n");
-	//	_printf_("   dpermil: " << dpermil << "\n");
+	_printf_("   dpermil: " << dpermil << "\n");
 	return;
 }
@@ -181,5 +188,5 @@
 	matpar->rlaps=this->rlaps;
 	matpar->rlapslgm=this->rlapslgm;
-	//	matpar->dpermil=this->dpermil;
+	matpar->dpermil=this->dpermil;
 
 	matpar->sediment_compressibility=this->sediment_compressibility;
@@ -277,7 +284,7 @@
 			this->rlapslgm=constant;
 			break;
-//		case  SurfaceforcingsDpermilEnum:
-//			this->dpermil=constant;
-//			break;
+		case  SurfaceforcingsDpermilEnum:
+			this->dpermil=constant;
+			break;
 		default: 
 			break;
@@ -406,5 +413,5 @@
 		case SurfaceforcingsRlapsEnum:               return this->rlaps;
 		case SurfaceforcingsRlapslgmEnum:            return this->rlapslgm;
-		  //		case SurfaceforcingsDpermilEnum:             return this->dpermil;
+		case SurfaceforcingsDpermilEnum:             return this->dpermil;
 		case MaterialsLithosphereShearModulusEnum:   return this->lithosphere_shear_modulus;
 		case MaterialsLithosphereDensityEnum:        return this->lithosphere_density;
Index: /issm/trunk-jpl/src/c/cores/transient_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/transient_core.cpp	(revision 19199)
+++ /issm/trunk-jpl/src/c/cores/transient_core.cpp	(revision 19200)
@@ -86,4 +86,5 @@
 			if(VerboseSolution()) _printf0_("   computing thermal regime\n");
 			if(smb_model==SMBpddEnum) ResetBoundaryConditions(femmodel,ThermalAnalysisEnum);
+			if(smb_model==SMBd18opddEnum) ResetBoundaryConditions(femmodel,ThermalAnalysisEnum);
 			thermal_core(femmodel);
 		}
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 19199)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp	(revision 19200)
@@ -108,5 +108,4 @@
 			parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsIsdelta18oEnum));
 			parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsIsmungsmEnum));
-			parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsIsd18opdEnum));
 			parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsDesfacEnum));
 			parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsS0pEnum));
@@ -116,5 +115,4 @@
 			iomodel->Constant(&isdelta18o,SurfaceforcingsIsdelta18oEnum);
 			iomodel->Constant(&ismungsm,SurfaceforcingsIsmungsmEnum);
-			iomodel->Constant(&isd18opd,SurfaceforcingsIsd18opdEnum);
 
 			if(ismungsm){
@@ -147,4 +145,15 @@
 				iomodel->DeleteData(temp,SurfaceforcingsDelta18oSurfaceEnum);
 			}
+			break;
+		case SMBd18opddEnum:
+			parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsIsmungsmEnum));
+			parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsIsd18opdEnum));
+			parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsDesfacEnum));
+			parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsS0pEnum));
+			parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsS0tEnum));
+			parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsRlapsEnum));
+			parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsRlapslgmEnum));
+			iomodel->Constant(&ismungsm,SurfaceforcingsIsmungsmEnum);
+			iomodel->Constant(&isd18opd,SurfaceforcingsIsd18opdEnum);
 			if(isd18opd){
 				iomodel->Constant(&yts,ConstantsYtsEnum);
Index: /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.cpp	(revision 19199)
+++ /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.cpp	(revision 19200)
@@ -24,5 +24,4 @@
 			femmodel->parameters->FindParam(&isdelta18o,SurfaceforcingsIsdelta18oEnum);
 			femmodel->parameters->FindParam(&ismungsm,SurfaceforcingsIsmungsmEnum);
-			femmodel->parameters->FindParam(&isd18opd,SurfaceforcingsIsd18opdEnum);
 			if(isdelta18o){
 				if(VerboseSolution()) _printf0_("   call Delta18oParameterization module\n");
@@ -33,10 +32,15 @@
 				MungsmtpParameterizationx(femmodel);
 			} 
+			if(VerboseSolution()) _printf0_("   call positive degree day module\n");
+			PositiveDegreeDayx(femmodel);
+			break;
+		case SMBd18opddEnum:
+			femmodel->parameters->FindParam(&isd18opd,SurfaceforcingsIsd18opdEnum);
 			if(isd18opd){
 				if(VerboseSolution()) _printf0_("   call Delta18opdParameterization module\n");
 				Delta18opdParameterizationx(femmodel);
-			} 
 			if(VerboseSolution()) _printf0_("   call positive degree day module\n");
 			PositiveDegreeDayx(femmodel);
+			} 
 			break;
 		case SMBgradientsEnum:
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 19199)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 19200)
@@ -347,5 +347,5 @@
 	SMBEnum,
 	SurfaceforcingsMassBalanceEnum,
-	SMBpddEnum,
+	SMBpddEnum,	
 	SurfaceforcingsDelta18oEnum,
 	SurfaceforcingsDelta18oSurfaceEnum,
@@ -366,4 +366,5 @@
 	SurfaceforcingsTdiffEnum,
 	SurfaceforcingsSealevEnum,
+	SMBd18opddEnum,
 	SurfaceforcingsDpermilEnum,
 	SMBgradientsEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 19199)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 19200)
@@ -370,4 +370,5 @@
 		case SurfaceforcingsTdiffEnum : return "SurfaceforcingsTdiff";
 		case SurfaceforcingsSealevEnum : return "SurfaceforcingsSealev";
+		case SMBd18opddEnum : return "SMBd18opdd";
 		case SurfaceforcingsDpermilEnum : return "SurfaceforcingsDpermil";
 		case SMBgradientsEnum : return "SMBgradients";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 19199)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 19200)
@@ -376,4 +376,5 @@
 	      else if (strcmp(name,"SurfaceforcingsTdiff")==0) return SurfaceforcingsTdiffEnum;
 	      else if (strcmp(name,"SurfaceforcingsSealev")==0) return SurfaceforcingsSealevEnum;
+	      else if (strcmp(name,"SMBd18opdd")==0) return SMBd18opddEnum;
 	      else if (strcmp(name,"SurfaceforcingsDpermil")==0) return SurfaceforcingsDpermilEnum;
 	      else if (strcmp(name,"SMBgradients")==0) return SMBgradientsEnum;
@@ -382,9 +383,9 @@
 	      else if (strcmp(name,"SurfaceforcingsSmbref")==0) return SurfaceforcingsSmbrefEnum;
 	      else if (strcmp(name,"SurfaceforcingsBPos")==0) return SurfaceforcingsBPosEnum;
-	      else if (strcmp(name,"SurfaceforcingsBNeg")==0) return SurfaceforcingsBNegEnum;
          else stage=4;
    }
    if(stage==4){
-	      if (strcmp(name,"SMBhenning")==0) return SMBhenningEnum;
+	      if (strcmp(name,"SurfaceforcingsBNeg")==0) return SurfaceforcingsBNegEnum;
+	      else if (strcmp(name,"SMBhenning")==0) return SMBhenningEnum;
 	      else if (strcmp(name,"SMBcomponents")==0) return SMBcomponentsEnum;
 	      else if (strcmp(name,"SurfaceforcingsAccumulation")==0) return SurfaceforcingsAccumulationEnum;
@@ -505,9 +506,9 @@
 	      else if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum;
 	      else if (strcmp(name,"NumericalfluxType")==0) return NumericalfluxTypeEnum;
-	      else if (strcmp(name,"Param")==0) return ParamEnum;
          else stage=5;
    }
    if(stage==5){
-	      if (strcmp(name,"Pengrid")==0) return PengridEnum;
+	      if (strcmp(name,"Param")==0) return ParamEnum;
+	      else if (strcmp(name,"Pengrid")==0) return PengridEnum;
 	      else if (strcmp(name,"Penpair")==0) return PenpairEnum;
 	      else if (strcmp(name,"Profiler")==0) return ProfilerEnum;
@@ -628,9 +629,9 @@
 	      else if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum;
 	      else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum;
-	      else if (strcmp(name,"StressMaxPrincipal")==0) return StressMaxPrincipalEnum;
          else stage=6;
    }
    if(stage==6){
-	      if (strcmp(name,"DeviatoricStress")==0) return DeviatoricStressEnum;
+	      if (strcmp(name,"StressMaxPrincipal")==0) return StressMaxPrincipalEnum;
+	      else if (strcmp(name,"DeviatoricStress")==0) return DeviatoricStressEnum;
 	      else if (strcmp(name,"DeviatoricStressxx")==0) return DeviatoricStressxxEnum;
 	      else if (strcmp(name,"DeviatoricStressxy")==0) return DeviatoricStressxyEnum;
@@ -751,9 +752,9 @@
 	      else if (strcmp(name,"Outputdefinition66")==0) return Outputdefinition66Enum;
 	      else if (strcmp(name,"Outputdefinition67")==0) return Outputdefinition67Enum;
-	      else if (strcmp(name,"Outputdefinition68")==0) return Outputdefinition68Enum;
          else stage=7;
    }
    if(stage==7){
-	      if (strcmp(name,"Outputdefinition69")==0) return Outputdefinition69Enum;
+	      if (strcmp(name,"Outputdefinition68")==0) return Outputdefinition68Enum;
+	      else if (strcmp(name,"Outputdefinition69")==0) return Outputdefinition69Enum;
 	      else if (strcmp(name,"Outputdefinition70")==0) return Outputdefinition70Enum;
 	      else if (strcmp(name,"Outputdefinition71")==0) return Outputdefinition71Enum;
@@ -874,9 +875,9 @@
 	      else if (strcmp(name,"Sset")==0) return SsetEnum;
 	      else if (strcmp(name,"Verbose")==0) return VerboseEnum;
-	      else if (strcmp(name,"TriangleInterp")==0) return TriangleInterpEnum;
          else stage=8;
    }
    if(stage==8){
-	      if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum;
+	      if (strcmp(name,"TriangleInterp")==0) return TriangleInterpEnum;
+	      else if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum;
 	      else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
 	      else if (strcmp(name,"XY")==0) return XYEnum;
Index: /issm/trunk-jpl/src/m/classes/SMBd18opdd.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBd18opdd.m	(revision 19200)
+++ /issm/trunk-jpl/src/m/classes/SMBd18opdd.m	(revision 19200)
@@ -0,0 +1,116 @@
+%SMBd18opdd Class definition
+%
+%   Usage:
+%      SMBd18opdd=SMBd18opdd();
+
+classdef SMBd18opdd
+	properties (SetAccess=public) 
+		desfac                    = 0;
+		s0p                       = 0;
+		s0t                       = 0;
+		rlaps                     = 0;
+		rlapslgm                  = 0; 
+                dpermil                   = 0; 
+		Tdiff                     = NaN;
+		sealev                    = NaN;
+		ismungsm                  = 0;
+                isd18opd                  = 0;
+		delta18o                  = NaN;
+		delta18o_surface          = NaN;
+		temperatures_presentday   = NaN;
+		precipitations_presentday = NaN;
+	end
+	methods
+		function self = SMBd18opdd(varargin) % {{{
+			switch nargin
+				case 0
+					self=setdefaultparameters(self);
+				otherwise
+					error('constructor not supported');
+			end
+		end % }}}
+		function self = extrude(self,md) % {{{
+			if(self.isd18opd),self.temperatures_presentday=project3d(md,'vector',self.temperatures_presentday,'type','node');end
+			if(self.isd18opd),self.precipitations_presentday=project3d(md,'vector',self.precipitations_presentday,'type','node');end
+
+		end % }}}
+		function self = initialize(self,md) % {{{
+                    
+			% if isnan(self.precipitation),
+			% 	self.precipitation=zeros(md.mesh.numberofvertices,1);
+			% 	disp('      no SMBd18opdd.precipitation specified: values set as zero');
+			% end
+
+		end % }}}
+		function self = setdefaultparameters(self) % {{{
+
+		  self.ismungsm   = 0;
+                  self.isd18opd   = 1;
+		  self.desfac     = 0.5;
+		  self.s0p        = 0;
+		  self.s0t        = 0;
+		  self.rlaps      = 6.5;
+		  self.rlapslgm   = 6.5;
+                  self.dpermil    = 2.4;
+                  
+		end % }}}
+		function md = checkconsistency(self,md,solution,analyses) % {{{
+
+			if ismember(MasstransportAnalysisEnum(),analyses),
+				md = checkfield(md,'fieldname','surfaceforcings.desfac','<=',1,'numel',1);
+				md = checkfield(md,'fieldname','surfaceforcings.s0p','>=',0,'numel',1);
+				md = checkfield(md,'fieldname','surfaceforcings.s0t','>=',0,'numel',1);
+				md = checkfield(md,'fieldname','surfaceforcings.rlaps','>=',0,'numel',1);
+				md = checkfield(md,'fieldname','surfaceforcings.rlapslgm','>=',0,'numel',1);
+                                if(self.isd18opd==1) 
+					md = checkfield(md,'fieldname','surfaceforcings.temperatures_presentday','size',[md.mesh.numberofvertices+1 12],'NaN',1);
+					md = checkfield(md,'fieldname','surfaceforcings.precipitations_presentday','size',[md.mesh.numberofvertices+1 12],'NaN',1);
+					md = checkfield(md,'fieldname','surfaceforcings.delta18o','NaN',1);
+                                        md = checkfield(md,'fieldname','surfaceforcings.dpermil','>=',0,'numel',1);
+				end
+			end
+		end % }}}
+		function disp(self) % {{{
+			disp(sprintf('   surface forcings parameters:'));
+
+			disp(sprintf('\n   PDD and deltaO18 parameters:'));
+			fielddisplay(self,'isd18opd','is delta18o parametrisation from present day temperature and precipitation activated (0 or 1, default is 0)');
+			fielddisplay(self,'desfac','desertification elevation factor (between 0 and 1, default is 0.5) [m]');
+			fielddisplay(self,'s0p','should be set to elevation from precip source (between 0 and a few 1000s m, default is 0) [m]');
+			fielddisplay(self,'s0t','should be set to elevation from temperature source (between 0 and a few 1000s m, default is 0) [m]');
+			fielddisplay(self,'rlaps','present day lapse rate [degree/km]');
+                        if(self.isd18opd==1) 
+                            fielddisplay(self,'temperatures_presentday','monthly present day surface temperatures [K], required if delta18o/mungsm/d18opd is activated');
+                            fielddisplay(self,'precipitations_presentday','monthly surface precipitation [m/yr water eq], required if delta18o/mungsm/d18opd is activated');
+                            fielddisplay(self,'delta18o','delta18o, required if pdd is activated and d18opd activated');  
+                            fielddisplay(self,'dpermil','degree per mil, required if d18opd is activated');                            
+                        end
+                        % No need to display rlapslgm, Tdiff, ismungsm
+                        % as they are not used in this case but are still needed as default values in
+                        % PositiveDegreeDay (Tria.cpp) used in that case
+		end % }}}
+		function marshall(self,md,fid) % {{{
+
+			yts=365.0*24.0*3600.0;
+
+			WriteData(fid,'enum',SurfaceforcingsEnum(),'data',SMBd18opddEnum(),'format','Integer');
+
+			WriteData(fid,'object',self,'class','surfaceforcings','fieldname','ismungsm','format','Boolean');
+			WriteData(fid,'object',self,'class','surfaceforcings','fieldname','isd18opd','format','Boolean');
+			WriteData(fid,'object',self,'class','surfaceforcings','fieldname','desfac','format','Double');
+			WriteData(fid,'object',self,'class','surfaceforcings','fieldname','s0p','format','Double');
+			WriteData(fid,'object',self,'class','surfaceforcings','fieldname','s0t','format','Double');
+			WriteData(fid,'object',self,'class','surfaceforcings','fieldname','rlaps','format','Double');
+			WriteData(fid,'object',self,'class','surfaceforcings','fieldname','rlapslgm','format','Double');
+                        WriteData(fid,'object',self,'class','surfaceforcings','fieldname','Tdiff','format','DoubleMat','mattype',1);
+                        WriteData(fid,'object',self,'class','surfaceforcings','fieldname','sealev','format','DoubleMat','mattype',1);
+
+			if self.isd18opd
+				WriteData(fid,'object',self,'class','surfaceforcings','fieldname','temperatures_presentday','format','DoubleMat','mattype',1);
+				WriteData(fid,'object',self,'class','surfaceforcings','fieldname','precipitations_presentday','format','DoubleMat','mattype',1);
+				WriteData(fid,'object',self,'class','surfaceforcings','fieldname','delta18o','format','DoubleMat','mattype',1);
+                                WriteData(fid,'object',self,'class','surfaceforcings','fieldname','dpermil','format','Double');
+			end
+		end % }}}
+	end
+end
Index: /issm/trunk-jpl/src/m/classes/SMBpdd.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBpdd.m	(revision 19199)
+++ /issm/trunk-jpl/src/m/classes/SMBpdd.m	(revision 19200)
@@ -13,5 +13,4 @@
 		rlaps                     = 0;
 		rlapslgm                  = 0; 
-                dpermil                   = 0; 
 		Pfac                      = NaN;
 		Tdiff                     = NaN;
@@ -19,5 +18,4 @@
 		isdelta18o                = 0;
 		ismungsm                  = 0;
-                isd18opd                  = 0;
 		delta18o                  = NaN;
 		delta18o_surface          = NaN;
@@ -37,6 +35,6 @@
 		end % }}}
 		function self = extrude(self,md) % {{{
-			if(self.isdelta18o==0 & self.ismungsm==0 & self.isd18opd==0),self.precipitation=project3d(md,'vector',self.precipitation,'type','node');end
-			if(self.isdelta18o==0 & self.ismungsm==0 & self.isd18opd==0),self.monthlytemperatures=project3d(md,'vector',self.monthlytemperatures,'type','node');end
+			if(self.isdelta18o==0 & self.ismungsm==0),self.precipitation=project3d(md,'vector',self.precipitation,'type','node');end
+			if(self.isdelta18o==0 & self.ismungsm==0),self.monthlytemperatures=project3d(md,'vector',self.monthlytemperatures,'type','node');end
 			if(self.isdelta18o),self.temperatures_lgm=project3d(md,'vector',self.temperatures_lgm,'type','node');end
 			if(self.isdelta18o),self.temperatures_presentday=project3d(md,'vector',self.temperatures_presentday,'type','node');end
@@ -47,6 +45,4 @@
 			if(self.ismungsm),self.precipitations_presentday=project3d(md,'vector',self.precipitations_presentday,'type','node');end
 			if(self.ismungsm),self.precipitations_lgm=project3d(md,'vector',self.precipitations_lgm,'type','node');end
-			if(self.isd18opd),self.temperatures_presentday=project3d(md,'vector',self.temperatures_presentday,'type','node');end
-			if(self.isd18opd),self.precipitations_presentday=project3d(md,'vector',self.precipitations_presentday,'type','node');end
 
 		end % }}}
@@ -63,5 +59,4 @@
 		  self.isdelta18o = 0;
 		  self.ismungsm   = 0;
-                  self.isd18opd   = 0;
 		  self.desfac     = 0.5;
 		  self.s0p        = 0;
@@ -69,5 +64,4 @@
 		  self.rlaps      = 6.5;
 		  self.rlapslgm   = 6.5;
-                  self.dpermil    = 2.4;
                   
 		end % }}}
@@ -80,5 +74,5 @@
 				md = checkfield(md,'fieldname','surfaceforcings.rlaps','>=',0,'numel',1);
 				md = checkfield(md,'fieldname','surfaceforcings.rlapslgm','>=',0,'numel',1);
-				if(self.isdelta18o==0 & self.ismungsm==0 & self.isd18opd==0)
+				if(self.isdelta18o==0 & self.ismungsm==0)
 					md = checkfield(md,'fieldname','surfaceforcings.monthlytemperatures','timeseries',1,'NaN',1);
 					md = checkfield(md,'fieldname','surfaceforcings.precipitation','timeseries',1,'NaN',1);
@@ -100,9 +94,4 @@
 					md = checkfield(md,'fieldname','surfaceforcings.Tdiff','NaN',1);
 					md = checkfield(md,'fieldname','surfaceforcings.sealev','NaN',1);
-				elseif(self.isd18opd==1) 
-					md = checkfield(md,'fieldname','surfaceforcings.temperatures_presentday','size',[md.mesh.numberofvertices+1 12],'NaN',1);
-					md = checkfield(md,'fieldname','surfaceforcings.precipitations_presentday','size',[md.mesh.numberofvertices+1 12],'NaN',1);
-					md = checkfield(md,'fieldname','surfaceforcings.delta18o','NaN',1);
-                                        md = checkfield(md,'fieldname','surfaceforcings.dpermil','>=',0,'numel',1);
 				end
 			end
@@ -114,5 +103,4 @@
 			fielddisplay(self,'isdelta18o','is temperature and precipitation delta18o parametrisation activated (0 or 1, default is 0)');
 			fielddisplay(self,'ismungsm','is temperature and precipitation mungsm parametrisation activated (0 or 1, default is 0)');
-			fielddisplay(self,'isd18opd','is delta18o parametrisation from present day temperature and precipitation activated (0 or 1, default is 0)');
 			fielddisplay(self,'desfac','desertification elevation factor (between 0 and 1, default is 0.5) [m]');
 			fielddisplay(self,'s0p','should be set to elevation from precip source (between 0 and a few 1000s m, default is 0) [m]');
@@ -120,5 +108,5 @@
 			fielddisplay(self,'rlaps','present day lapse rate [degree/km]');
 			fielddisplay(self,'rlapslgm','LGM lapse rate [degree/km]');
-                        if(self.isdelta18o==0 & self.ismungsm==0 & self.isd18opd==0)
+                        if(self.isdelta18o==0 & self.ismungsm==0)
                             fielddisplay(self,'monthlytemperatures',['monthly surface temperatures [K], required if pdd is activated and delta18o not activated']);
                             fielddisplay(self,'precipitation',['monthly surface precipitation [m/yr water eq], required if pdd is activated and delta18o or mungsm not activated']);
@@ -128,21 +116,16 @@
                             fielddisplay(self,'temperatures_presentday','monthly present day surface temperatures [K], required if delta18o/mungsm is activated');
                             fielddisplay(self,'temperatures_lgm','monthly LGM surface temperatures [K], required if delta18o or mungsm is activated');
-                            fielddisplay(self,'precipitations_presentday','monthly surface precipitation [m/yr water eq], required if delta18o/mungsm/d18opd is activated');
+                            fielddisplay(self,'precipitations_presentday','monthly surface precipitation [m/yr water eq], required if delta18o/mungsm is activated');
                             fielddisplay(self,'precipitations_lgm','monthly surface precipitation [m/yr water eq], required if delta18o/mungsm is activated');
                             fielddisplay(self,'Tdiff','time interpolation parameter for temperature, 1D(year), required if mungsm is activated');
                             fielddisplay(self,'sealev','sea level [m], 1D(year), required if mungsm is activated');
                         elseif(self.ismungsm==1)
-                            fielddisplay(self,'temperatures_presentday','monthly present day surface temperatures [K], required if delta18o/mungsm/d18opd is activated');
+                            fielddisplay(self,'temperatures_presentday','monthly present day surface temperatures [K], required if delta18o/mungsm is activated');
                             fielddisplay(self,'temperatures_lgm','monthly LGM surface temperatures [K], required if delta18o or mungsm is activated');
-                            fielddisplay(self,'precipitations_presentday','monthly surface precipitation [m/yr water eq], required if delta18o/mungsm/d18opd is activated');
+                            fielddisplay(self,'precipitations_presentday','monthly surface precipitation [m/yr water eq], required if delta18o/mungsm is activated');
                             fielddisplay(self,'precipitations_lgm','monthly surface precipitation [m/yr water eq], required if delta18o/mungsm is activated');
                             fielddisplay(self,'Pfac','time interpolation parameter for precipitation, 1D(year), required if mungsm is activated');
                             fielddisplay(self,'Tdiff','time interpolation parameter for temperature, 1D(year), required if mungsm is activated');
                             fielddisplay(self,'sealev','sea level [m], 1D(year), required if mungsm is activated');
-                        elseif(self.isd18opd==1) 
-                            fielddisplay(self,'temperatures_presentday','monthly present day surface temperatures [K], required if delta18o/mungsm/d18opd is activated');
-                            fielddisplay(self,'precipitations_presentday','monthly surface precipitation [m/yr water eq], required if delta18o/mungsm/d18opd is activated');
-                            fielddisplay(self,'delta18o','delta18o, required if pdd is activated and d18opd activated');  
-                            fielddisplay(self,'dpermil','degree per mil, required if d18opd is activated');                            
                         end
 		end % }}}
@@ -155,5 +138,4 @@
 			WriteData(fid,'object',self,'class','surfaceforcings','fieldname','isdelta18o','format','Boolean');
 			WriteData(fid,'object',self,'class','surfaceforcings','fieldname','ismungsm','format','Boolean');
-			WriteData(fid,'object',self,'class','surfaceforcings','fieldname','isd18opd','format','Boolean');
 			WriteData(fid,'object',self,'class','surfaceforcings','fieldname','desfac','format','Double');
 			WriteData(fid,'object',self,'class','surfaceforcings','fieldname','s0p','format','Double');
@@ -162,5 +144,5 @@
 			WriteData(fid,'object',self,'class','surfaceforcings','fieldname','rlapslgm','format','Double');
 
-			if(self.isdelta18o==0 & self.ismungsm==0 & self.isd18opd==0)
+			if(self.isdelta18o==0 & self.ismungsm==0)
 				%WriteData(fid,'object',self,'class','surfaceforcings','fieldname','monthlytemperatures','format','DoubleMat','mattype',1);
 				WriteData(fid,'object',self,'class','surfaceforcings','fieldname','monthlytemperatures','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
@@ -183,9 +165,4 @@
 				WriteData(fid,'object',self,'class','surfaceforcings','fieldname','Tdiff','format','DoubleMat','mattype',1);
 				WriteData(fid,'object',self,'class','surfaceforcings','fieldname','sealev','format','DoubleMat','mattype',1);
-			elseif self.isd18opd
-				WriteData(fid,'object',self,'class','surfaceforcings','fieldname','temperatures_presentday','format','DoubleMat','mattype',1);
-				WriteData(fid,'object',self,'class','surfaceforcings','fieldname','precipitations_presentday','format','DoubleMat','mattype',1);
-				WriteData(fid,'object',self,'class','surfaceforcings','fieldname','delta18o','format','DoubleMat','mattype',1);
-                                WriteData(fid,'object',self,'class','surfaceforcings','fieldname','dpermil','format','Double');
 			end
 		end % }}}
Index: /issm/trunk-jpl/src/m/classes/SMBpdd.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBpdd.py	(revision 19199)
+++ /issm/trunk-jpl/src/m/classes/SMBpdd.py	(revision 19200)
@@ -27,5 +27,4 @@
 		self.isdelta18o                = 0
 		self.ismungsm                  = 0
-		self.isd18opd                  = 0
 		self.delta18o                  = float('NaN')
 		self.delta18o_surface          = float('NaN')
@@ -43,5 +42,4 @@
 		string="%s\n%s"%(string,fielddisplay(self,'isdelta18o','is temperature and precipitation delta18o parametrisation activated (0 or 1, default is 0)'))
 		string="%s\n%s"%(string,fielddisplay(self,'ismungsm','is temperature and precipitation mungsm parametrisation activated (0 or 1, default is 0)'))
-		string="%s\n%s"%(string,fielddisplay(self,'isd18opd','is delta18o parametrisation from present day temperature and precipitation activated (0 or 1, default is 0)'))
 		string="%s\n%s"%(string,fielddisplay(self,'desfac','desertification elevation factor (between 0 and 1, default is 0.5) [m]'))
 		string="%s\n%s"%(string,fielddisplay(self,'s0p','should be set to elevation from precip source (between 0 and a few 1000s m, default is 0) [m]'))
@@ -73,5 +71,5 @@
 	def extrude(self,md): # {{{
 
-		if not (self.isdelta18o and self.ismungsm and self.isd18opd):
+		if not (self.isdelta18o and self.ismungsm):
 			self.precipitation=project3d(md,'vector',self.precipitation,'type','node')
 			self.monthlytemperatures=project3d(md,'vector',self.monthlytemperatures,'type','node')
@@ -116,5 +114,5 @@
 			md = checkfield(md,'fieldname','surfaceforcings.rlapslgm','>=',0,'numel',[1])
 
-			if (self.isdelta18o==0 and self.ismungsm==0 and self.isd18opd):
+			if (self.isdelta18o==0 and self.ismungsm==0):
 				md = checkfield(md,'fieldname','surfaceforcings.monthlytemperatures','NaN',1)
 				md = checkfield(md,'fieldname','surfaceforcings.precipitation','NaN',1)
@@ -147,5 +145,4 @@
 		WriteData(fid,'object',self,'class','surfaceforcings','fieldname','isdelta18o','format','Boolean')
 		WriteData(fid,'object',self,'class','surfaceforcings','fieldname','ismungsm','format','Boolean')
-		WriteData(fid,'object',self,'class','surfaceforcings','fieldname','isd18opd','format','Boolean')
 		WriteData(fid,'object',self,'class','surfaceforcings','fieldname','desfac','format','Double')
 		WriteData(fid,'object',self,'class','surfaceforcings','fieldname','s0p','format','Double')
Index: /issm/trunk-jpl/src/m/classes/clusters/acenet.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/acenet.m	(revision 19199)
+++ /issm/trunk-jpl/src/m/classes/clusters/acenet.m	(revision 19200)
@@ -74,19 +74,14 @@
           % fprintf(fid,'#$ -l h_rt=336:00:0\n');
 
-          fprintf(fid,'#$ -l h_vmem=3G\n');
-	  % if cluster.np>10
-          %     fprintf(fid,'#$ -l h_vmem=3G\n');
-          % else
-          %     fprintf(fid,'#$ -l h_vmem=3G\n');
-          % end
+          fprintf(fid,'#$ -l h_vmem=2G\n');
 
           % ---- Which queue to use ----
-          %fprintf(fid,'#$ -q !tarasov.q\n'); %
+          % fprintf(fid,'#$ -q tarasov.q\n'); %
           %fprintf(fid,'#$ -q medium.q@*,short.q@*\n');
           fprintf(fid,'#$ -q short.q@*\n');
 
           % ---- Which node are selected ----
-          % fprintf(fid,'#$ -l h=cl27*|cl28*|cl29*|cl30*|cl31*|cl320|cl267|cl268|cl269|cl338 \n');
-          %fprintf(fid,'#$ -l h=cl0* \n');
+          %fprintf(fid,'#$ -l h=cl27*|cl28*|cl29*|cl30*|cl31*|cl320|cl267|cl268|cl269|cl338 \n');
+          % fprintf(fid,'#$ -l h=cl0* \n');
           %fprintf(fid,'#$ -l h=cl338 \n');
           % Acenet nodes with 16cpus and more than 60G mem
@@ -94,8 +89,8 @@
   
           % ---- cpus on different nodes ----
-           fprintf(fid,'#$ -pe ompi %i\n',cluster.np); % To avoid green acenet that does not have InfiniBand
+          fprintf(fid,'#$ -pe ompi %i\n',cluster.np); % To avoid green acenet that does not have InfiniBand
           % fprintf(fid,'#$ -pe ompi* %i\n',cluster.np);
           % -------- All cpus in the same node --------          
-          %fprintf(fid,'#$ -pe openmp %i\n',cluster.np);
+          % fprintf(fid,'#$ -pe openmp %i\n',cluster.np);
           
           % ---- misc ----
Index: /issm/trunk-jpl/src/m/enum/EnumDefinitions.py
===================================================================
--- /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 19199)
+++ /issm/trunk-jpl/src/m/enum/EnumDefinitions.py	(revision 19200)
@@ -362,4 +362,5 @@
 def SurfaceforcingsTdiffEnum(): return StringToEnum("SurfaceforcingsTdiff")[0]
 def SurfaceforcingsSealevEnum(): return StringToEnum("SurfaceforcingsSealev")[0]
+def SMBd18opddEnum(): return StringToEnum("SMBd18opdd")[0]
 def SurfaceforcingsDpermilEnum(): return StringToEnum("SurfaceforcingsDpermil")[0]
 def SMBgradientsEnum(): return StringToEnum("SMBgradients")[0]
Index: /issm/trunk-jpl/src/m/enum/SMBd18opddEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SMBd18opddEnum.m	(revision 19200)
+++ /issm/trunk-jpl/src/m/enum/SMBd18opddEnum.m	(revision 19200)
@@ -0,0 +1,11 @@
+function macro=SMBd18opddEnum()
+%SMBD18OPDDENUM - Enum of SMBd18opdd
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SMBd18opddEnum()
+
+macro=StringToEnum('SMBd18opdd');
Index: /issm/trunk-jpl/test/NightlyRun/test240.m
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test240.m	(revision 19200)
+++ /issm/trunk-jpl/test/NightlyRun/test240.m	(revision 19200)
@@ -0,0 +1,85 @@
+%Test Name: SquareShelfTranIspddIsdeltaO18pdSSA2d
+md=triangle(model(),'../Exp/Square.exp',150000.);
+md=setmask(md,'all','');
+md=parameterize(md,'../Par/SquareShelf.par');
+
+%md.verbose=verbose('all');
+
+% Use of ispdd and isdelta18o methods
+md.surfaceforcings = SMBd18opdd();
+md.surfaceforcings.isd18opd=1;
+%md.surfaceforcings.precipitation(1:md.mesh.numberofvertices,1:12)=0;
+%md.surfaceforcings.monthlytemperatures(1:md.mesh.numberofvertices,1:12)=273;
+
+% Add temperature, precipitation and delta18o needed to measure the surface mass balance
+%  creating delta18o
+load '../Data/delta18o.data'
+md.surfaceforcings.delta18o=delta18o;
+
+% creating Present day  temperatures
+% Same temperature over the all region:
+tmonth(1:12)=238.15+20.;
+for imonth=0:11
+    md.surfaceforcings.temperatures_presentday(1:md.mesh.numberofvertices,imonth+1)=tmonth(imonth+1);
+    % Time for the last line:
+    md.surfaceforcings.temperatures_presentday(md.mesh.numberofvertices+1,imonth+1)=((imonth+1)/12);
+end
+
+% creating initialization and spc temperatures initialization and
+% spc
+md.thermal.spctemperature=mean(md.surfaceforcings.temperatures_presentday(1:md.mesh.numberofvertices,1:12),2)-10; %-10*ones(md.mesh.numberofvertices,1);
+
+md.initialization.temperature=md.thermal.spctemperature; %md.surfaceforcings.temperatures_presentday(1:md.mesh.numberofvertices,1);
+
+% creating precipitation
+for imonth=0:11
+    md.surfaceforcings.precipitations_presentday(1:md.mesh.numberofvertices,imonth+1)=-0.4*10^(-6)*md.mesh.y+0.5;
+    % Time for the last line:
+    md.surfaceforcings.precipitations_presentday(md.mesh.numberofvertices+1,imonth+1)=((imonth+1)/12);
+end
+
+% time steps and resolution
+md.timestepping.time_step=20;
+md.settings.output_frequency=1;
+md.timestepping.final_time=60;
+
+% 
+md.transient.requested_outputs={'default','SurfaceforcingsMonthlytemperatures'};
+md=setflowequation(md,'SSA','all');
+md.cluster=generic('name',oshostname(),'np',1); % 3 for the cluster
+md=solve(md,TransientSolutionEnum());
+
+%Fields and tolerances to track changes
+field_names     ={'Vx1','Vy1','Vel1','Pressure1','Bed1','Surface1','Thickness1','Vx2','Vy2','Vel2','Pressure2','Bed2','Surface2','Thickness2','Vx3','Vy3','Vel3','Pressure3','Bed3','Surface3','Thickness3'};
+field_tolerances={1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
+	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,...
+	1e-13,1e-13,1e-13,1e-13,1e-13,1e-13,1e-13};
+field_values={...
+	(md.results.TransientSolution(1).Vx),...
+	(md.results.TransientSolution(1).Vy),...
+	(md.results.TransientSolution(1).Vel),...
+	(md.results.TransientSolution(1).Pressure),...
+	(md.results.TransientSolution(1).Base),...
+	(md.results.TransientSolution(1).Surface),...
+	(md.results.TransientSolution(1).Thickness),...
+	(md.results.TransientSolution(1).SurfaceforcingsMonthlytemperatures),...
+	(md.results.TransientSolution(1).SurfaceforcingsMassBalance),...
+	(md.results.TransientSolution(2).Vx),...
+	(md.results.TransientSolution(2).Vy),...
+	(md.results.TransientSolution(2).Vel),...
+	(md.results.TransientSolution(2).Pressure),...
+	(md.results.TransientSolution(2).Base),...
+	(md.results.TransientSolution(2).Surface),...
+	(md.results.TransientSolution(2).Thickness),...
+	(md.results.TransientSolution(2).SurfaceforcingsMonthlytemperatures),...
+	(md.results.TransientSolution(2).SurfaceforcingsMassBalance),...
+	(md.results.TransientSolution(3).Vx),...
+	(md.results.TransientSolution(3).Vy),...
+	(md.results.TransientSolution(3).Vel),...
+	(md.results.TransientSolution(3).Pressure),...
+	(md.results.TransientSolution(3).Base),...
+	(md.results.TransientSolution(3).Surface),...
+	(md.results.TransientSolution(3).Thickness),...
+	(md.results.TransientSolution(3).SurfaceforcingsMonthlytemperatures),...
+	(md.results.TransientSolution(3).SurfaceforcingsMassBalance),...
+	};
