Index: /issm/trunk-jpl/jenkins/javascript/karma/karma.conf.js
===================================================================
--- /issm/trunk-jpl/jenkins/javascript/karma/karma.conf.js	(revision 20805)
+++ /issm/trunk-jpl/jenkins/javascript/karma/karma.conf.js	(revision 20806)
@@ -27,4 +27,5 @@
       'lib/bin/inversion.js',
       'lib/bin/SMBforcing.js',
+      'lib/bin/initialization.js',
       'lib/bin/project3d.js',
       'lib/bin/model.js',
Index: /issm/trunk-jpl/jenkins/javascript/karma/lib/bin/SMBforcing.js
===================================================================
--- /issm/trunk-jpl/jenkins/javascript/karma/lib/bin/SMBforcing.js	(revision 20805)
+++ /issm/trunk-jpl/jenkins/javascript/karma/lib/bin/SMBforcing.js	(revision 20806)
@@ -22,4 +22,5 @@
     this.extrude = function(md) {//{{{
         this.mass_balance=project3d(md,'vector',this.mass_balance,'type','node');
+        return this;
     }//}}}
     this.initialize = function(md) {// {{{
Index: /issm/trunk-jpl/jenkins/javascript/karma/lib/bin/friction.js
===================================================================
--- /issm/trunk-jpl/jenkins/javascript/karma/lib/bin/friction.js	(revision 20805)
+++ /issm/trunk-jpl/jenkins/javascript/karma/lib/bin/friction.js	(revision 20806)
@@ -16,14 +16,8 @@
 	} // }}}
     this.extrude = function(md) {//{{{
-
-        console.log("coefficient");
-        console.log(self.coefficient);
-        console.log("p");
-        console.log(self.p);
-        console.log("q");
-        console.log(self.q);
         self.coefficient = project3d(md, 'vector', self.coefficient, 'type', 'node', 'layer', 1);
         self.p = project3d(md, 'vector', self.p, 'type', 'element');
         self.q = project3d(md, 'vector', self.q, 'type', 'element');
+        return this;
     }//}}}
 	this.classname= function (){// {{{
Index: /issm/trunk-jpl/jenkins/javascript/karma/lib/bin/geometry.js
===================================================================
--- /issm/trunk-jpl/jenkins/javascript/karma/lib/bin/geometry.js	(revision 20805)
+++ /issm/trunk-jpl/jenkins/javascript/karma/lib/bin/geometry.js	(revision 20806)
@@ -22,4 +22,5 @@
             this.base=project3d(md,'vector',this.base,'type','node');
             this.bed=project3d(md,'vector',this.bed,'type','node');
+            return this;
         }//}}}
 		this.classname = function () { //{{{
Index: /issm/trunk-jpl/jenkins/javascript/karma/lib/bin/initialization.js
===================================================================
--- /issm/trunk-jpl/jenkins/javascript/karma/lib/bin/initialization.js	(revision 20806)
+++ /issm/trunk-jpl/jenkins/javascript/karma/lib/bin/initialization.js	(revision 20806)
@@ -0,0 +1,152 @@
+//INITIALIZATION class definition
+//
+//   Usage:
+//      initialization=new initialization();
+
+function initialization (){
+	//methods
+	this.setdefaultparameters = function(){// {{{
+	}// }}}
+	this.disp= function(){// {{{
+		console.log(sprintf('   initial field values:'));
+
+		fielddisplay(this,'vx','x component of velocity [m/yr]');
+		fielddisplay(this,'vy','y component of velocity [m/yr]');
+		fielddisplay(this,'vz','z component of velocity [m/yr]');
+		fielddisplay(this,'vel','velocity norm [m/yr]');
+		fielddisplay(this,'pressure','pressure field [Pa]');
+		fielddisplay(this,'temperature','temperature [K]');
+		fielddisplay(this,'waterfraction','fraction of water in the ice');
+		fielddisplay(this,'sediment_head','sediment water head of subglacial system [m]');
+		fielddisplay(this,'epl_head','epl water head of subglacial system [m]');
+		fielddisplay(this,'epl_thickness','epl layer thickness [m]');
+		fielddisplay(this,'watercolumn','thickness of subglacial water [m]');
+
+	}// }}}
+    this.extrude = function(md) {//{{{
+        this.vx=project3d(md,'vector',this.vx,'type','node');
+        this.vy=project3d(md,'vector',this.vy,'type','node');
+        this.vz=project3d(md,'vector',this.vz,'type','node');
+        this.vel=project3d(md,'vector',this.vel,'type','node');
+        this.temperature=project3d(md,'vector',this.temperature,'type','node');
+        this.waterfraction=project3d(md,'vector',this.waterfraction,'type','node');
+        this.watercolumn=project3d(md,'vector',this.watercolumn,'type','node','layer',1);
+        this.sediment_head=project3d(md,'vector',this.sediment_head,'type','node','layer',1);
+        this.epl_head=project3d(md,'vector',this.epl_head,'type','node','layer',1);
+        this.epl_thickness=project3d(md,'vector',this.epl_thickness,'type','node','layer',1);
+
+        //Lithostatic pressure by default
+        this.pressure=md.constants.g*md.materials.rho_ice*(md.geometry.surface-md.mesh.z);
+        return this;
+    }//}}}
+		this.checkconsistency = function(md,solution,analyses) { //{{{
+			if(ArrayAnyEqual(ArrayIsMember(StressbalanceAnalysisEnum(),analyses),1)){
+				if (!(isNaN(md.initialization.vx) | isNaN(md.initialization.vy))){
+					checkfield(md,'fieldname','initialization.vx','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+					checkfield(md,'fieldname','initialization.vy','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+				}
+			}
+			if(ArrayAnyEqual(ArrayIsMember(MasstransportAnalysisEnum(),analyses),1)){
+				checkfield(md,'fieldname','initialization.vx','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+				checkfield(md,'fieldname','initialization.vy','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+			}
+			if(ArrayAnyEqual(ArrayIsMember(BalancethicknessSolutionEnum(),analyses),1) & (solution==BalancethicknessSolutionEnum())){
+				checkfield(md,'fieldname','initialization.vx','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+				checkfield(md,'fieldname','initialization.vy','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+				//Triangle with zero velocity
+				for(var i=0;i<md.mesh.numberofelements;i++){
+					var sum=0;
+					for(var j=0;j<md.mesh.elements[0].length;j++){
+						if  ((md.initialization.vx[md.mesh.elements[i][j]-1]==0) & (md.initialization.vy[md.mesh.elements[i][j]-1]==0)) sum+=1;
+					}
+					if (sum==md.mesh.elements[0].length){
+						md.checkmessage('at least one triangle has all its vertices with a zero velocity');
+					}
+				}
+			}
+			if(ArrayAnyEqual(ArrayIsMember(ThermalAnalysisEnum(),analyses),1)){
+				checkfield(md,'fieldname','initialization.vx','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+				checkfield(md,'fieldname','initialization.vy','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+				if (md.mesh.dimension() == 3){
+					checkfield(md,'fieldname','initialization.vz','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices ,1]);
+				}
+				checkfield(md,'fieldname','initialization.pressure','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices ,1]);
+				checkfield(md,'fieldname','initialization.temperature','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices ,1]);
+			}
+			if( ArrayAnyEqual(ArrayIsMember(EnthalpyAnalysisEnum(),analyses),1) & md.thermal.isenthalpy){
+				checkfield(md,'fieldname','initialization.waterfraction','>=',0,'size',[md.mesh.numberofvertices, 1]);
+				checkfield(md,'fieldname','initialization.watercolumn'  ,'>=',0,'size',[md.mesh.numberofvertices, 1]);
+			}
+			if(ArrayAnyEqual(ArrayIsMember(HydrologyShreveAnalysisEnum(),analyses),1)){
+				if (md.hydrology.type() == 'hydrologyshreve'){
+					checkfield(md,'fieldname','initialization.watercolumn','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices ,1]);
+				}
+			}
+			if(ArrayAnyEqual(ArrayIsMember(HydrologyDCInefficientAnalysisEnum(),analyses),1)){
+				if (md.hydrology.type() == 'hydrologydc'){
+					checkfield(md,'fieldname','initialization.sediment_head','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices, 1]);
+				}
+			}
+			if(ArrayAnyEqual(ArrayIsMember(HydrologyDCEfficientAnalysisEnum(),analyses),1)){
+				if (md.hydrology.type() == 'hydrologydc'){
+					if (md.hydrology.isefficientlayer==1){
+						checkfield(md,'fieldname','initialization.epl_head','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices ,1]);
+						checkfield(md,'fieldname','initialization.epl_thickness','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices ,1]);
+					}
+				}
+			}
+		} //}}}
+		this.marshall=function(md,prefix,fid) { //{{{
+
+			var yts=365.0*24.0*3600.0;
+
+			WriteData(fid,prefix,'object',this,'fieldname','vx','format','DoubleMat','mattype',1,'scale',1./yts);
+			WriteData(fid,prefix,'object',this,'fieldname','vy','format','DoubleMat','mattype',1,'scale',1./yts);
+			WriteData(fid,prefix,'object',this,'fieldname','vz','format','DoubleMat','mattype',1,'scale',1./yts);
+			WriteData(fid,prefix,'object',this,'fieldname','pressure','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','temperature','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','waterfraction','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','sediment_head','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','epl_head','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','epl_thickness','format','DoubleMat','mattype',1);
+			WriteData(fid,prefix,'object',this,'fieldname','watercolumn','format','DoubleMat','mattype',1);
+
+			if (md.thermal.isenthalpy){
+				tpmp=NewArrayFill(md.mesh.numberofvertices,0);
+				for (var i=0;i<md.mesh.numberofvertices;i++) tpmp[i]= md.materials.meltingpoint - md.materials.beta*md.initialization.pressure[i];
+				enthalpy=NewArrayFill(md.mesh.numberofvertices,0); 
+				for (var i=0;i<md.mesh.numberofvertices;i++)enthalpy[i] = md.materials.heatcapacity*(md.initialization.temperature[i]-md.constants.referencetemperature);
+				
+				for (var i=0;i<md.mesh.numberofvertices;i++)if(md.initialization.temperature[i]>=tpmp[i]){
+					enthalpy[i] = md.materials.heatcapacity*(tpmp[i] - md.constants.referencetemperature) + md.materials.latentheat*md.initialization.waterfraction[i];
+				}
+				WriteData(fid,prefix,'data',enthalpy,'format','DoubleMat','mattype',1,'name','md.initialization.enthalpy');
+			}
+		}//}}}
+		this.fix=function(md) { //{{{
+			this.vx=FloatFix(this.vx,md.mesh.numberofvertices); 
+			this.vy=FloatFix(this.vx,md.mesh.numberofvertices); 
+			this.vy=FloatFix(this.vx,md.mesh.numberofvertices); 
+			this.waterfraction=NullFix(this.waterfraction,NaN);
+			this.sediment_head=NullFix(this.sediment_head,NaN);
+			this.epl_head=NullFix(this.epl_head,NaN);
+			this.epl_thickness=NullFix(this.epl_thickness,NaN);
+			this.watercolumn=NullFix(this.watercolumn,NaN);
+		}//}}}
+	//properties 
+	// {{{
+	this.vx            = NaN;
+	this.vy            = NaN;
+	this.vz            = NaN;
+	this.vel           = NaN;
+	this.pressure      = NaN;
+	this.temperature   = NaN;
+	this.waterfraction = NaN;
+	this.sediment_head = NaN;
+	this.epl_head      = NaN;
+	this.epl_thickness = NaN;
+	this.watercolumn   = NaN;
+	this.setdefaultparameters();
+
+	//}}}
+}
Index: /issm/trunk-jpl/jenkins/javascript/karma/lib/bin/inversion.js
===================================================================
--- /issm/trunk-jpl/jenkins/javascript/karma/lib/bin/inversion.js	(revision 20805)
+++ /issm/trunk-jpl/jenkins/javascript/karma/lib/bin/inversion.js	(revision 20806)
@@ -90,4 +90,5 @@
             this.max_parameters=project3d(md,'vector',this.max_parameters,'type','node');
         }
+        return this;
     }//}}}
 	this.classname= function(){// {{{
Index: /issm/trunk-jpl/jenkins/javascript/karma/lib/bin/model.js
===================================================================
--- /issm/trunk-jpl/jenkins/javascript/karma/lib/bin/model.js	(revision 20805)
+++ /issm/trunk-jpl/jenkins/javascript/karma/lib/bin/model.js	(revision 20806)
@@ -329,8 +329,8 @@
 
                 md.geometry=md.geometry.extrude(md);
-                md.friction  = md.friction.extrude(md);
-                md.inversion = md.inversion.extrude(md);
-                md.smb = md.smb.extrude(md);
-                md.initialization = extrude(md.initialization,md);
+                md.friction=md.friction.extrude(md);
+                md.inversion=md.inversion.extrude(md);
+                md.smb=md.smb.extrude(md);
+                md.initialization=md.initialization.extrude(md);
 
                 md.flowequation=md.flowequation.extrude(md);
Index: /issm/trunk-jpl/jenkins/javascript/karma/lib/bin/project3d.js
===================================================================
--- /issm/trunk-jpl/jenkins/javascript/karma/lib/bin/project3d.js	(revision 20805)
+++ /issm/trunk-jpl/jenkins/javascript/karma/lib/bin/project3d.js	(revision 20806)
@@ -112,3 +112,5 @@
         console.error('project3d error message: unknown projection type');
     }
+
+    return projected_vector;
 };
Index: /issm/trunk-jpl/src/m/classes/SMBforcing.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBforcing.js	(revision 20805)
+++ /issm/trunk-jpl/src/m/classes/SMBforcing.js	(revision 20806)
@@ -22,4 +22,5 @@
     this.extrude = function(md) {//{{{
         this.mass_balance=project3d(md,'vector',this.mass_balance,'type','node');
+        return this;
     }//}}}
     this.initialize = function(md) {// {{{
Index: /issm/trunk-jpl/src/m/classes/friction.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/friction.js	(revision 20805)
+++ /issm/trunk-jpl/src/m/classes/friction.js	(revision 20806)
@@ -16,14 +16,8 @@
 	} // }}}
     this.extrude = function(md) {//{{{
-
-        console.log("coefficient");
-        console.log(self.coefficient);
-        console.log("p");
-        console.log(self.p);
-        console.log("q");
-        console.log(self.q);
         self.coefficient = project3d(md, 'vector', self.coefficient, 'type', 'node', 'layer', 1);
         self.p = project3d(md, 'vector', self.p, 'type', 'element');
         self.q = project3d(md, 'vector', self.q, 'type', 'element');
+        return this;
     }//}}}
 	this.classname= function (){// {{{
Index: /issm/trunk-jpl/src/m/classes/geometry.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/geometry.js	(revision 20805)
+++ /issm/trunk-jpl/src/m/classes/geometry.js	(revision 20806)
@@ -22,4 +22,5 @@
             this.base=project3d(md,'vector',this.base,'type','node');
             this.bed=project3d(md,'vector',this.bed,'type','node');
+            return this;
         }//}}}
 		this.classname = function () { //{{{
Index: /issm/trunk-jpl/src/m/classes/initialization.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/initialization.js	(revision 20805)
+++ /issm/trunk-jpl/src/m/classes/initialization.js	(revision 20806)
@@ -24,4 +24,20 @@
 
 	}// }}}
+    this.extrude = function(md) {//{{{
+        this.vx=project3d(md,'vector',this.vx,'type','node');
+        this.vy=project3d(md,'vector',this.vy,'type','node');
+        this.vz=project3d(md,'vector',this.vz,'type','node');
+        this.vel=project3d(md,'vector',this.vel,'type','node');
+        this.temperature=project3d(md,'vector',this.temperature,'type','node');
+        this.waterfraction=project3d(md,'vector',this.waterfraction,'type','node');
+        this.watercolumn=project3d(md,'vector',this.watercolumn,'type','node','layer',1);
+        this.sediment_head=project3d(md,'vector',this.sediment_head,'type','node','layer',1);
+        this.epl_head=project3d(md,'vector',this.epl_head,'type','node','layer',1);
+        this.epl_thickness=project3d(md,'vector',this.epl_thickness,'type','node','layer',1);
+
+        //Lithostatic pressure by default
+        this.pressure=md.constants.g*md.materials.rho_ice*(md.geometry.surface-md.mesh.z);
+        return this;
+    }//}}}
 		this.checkconsistency = function(md,solution,analyses) { //{{{
 			if(ArrayAnyEqual(ArrayIsMember(StressbalanceAnalysisEnum(),analyses),1)){
Index: /issm/trunk-jpl/src/m/classes/inversion.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/inversion.js	(revision 20805)
+++ /issm/trunk-jpl/src/m/classes/inversion.js	(revision 20806)
@@ -90,4 +90,5 @@
             this.max_parameters=project3d(md,'vector',this.max_parameters,'type','node');
         }
+        return this;
     }//}}}
 	this.classname= function(){// {{{
