Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 19792)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 19793)
@@ -112,6 +112,8 @@
 	char *lockfilename   = NULL;
 
-	this->parameters->FindParam(&outbinfilename,OutputFileNameEnum);
-	this->parameters->FindParam(&lockfilename,LockFileNameEnum);
+	#ifndef _HAVE_JAVASCRIPT_
+	if(this->parameters->Exist(OutputFileNameEnum)) this->parameters->FindParam(&outbinfilename,OutputFileNameEnum);
+	if(this-parameters->Exist(LockFileNameEnum)) this->parameters->FindParam(&lockfilename,LockFileNameEnum);
+	#endif
 
 	/*Delete all the datasets: */
@@ -2335,2 +2337,119 @@
 }
 /*}}}*/
+
+#ifdef _HAVE_JAVASCRIPT_ 
+FemModel::FemModel(IssmDouble* buffer, int buffersize, char* toolkits, char* solution, char* modelname,ISSM_MPI_Comm incomm, bool trace){ /*{{{*/
+	/*configuration: */
+	int  solution_type;
+	int  ierr;
+
+	/*First things first, store the communicator, and set it as a global variable: */
+	this->comm=incomm;
+	this->SetStaticComm();
+
+	/*Start profiler: */
+	this->profiler=new Profiler();
+	profiler->Tag(Start);
+
+	/*From command line arguments, retrieve different filenames needed to create the FemModel: */
+	solution_type=StringToEnumx(solution);
+	
+	/*Create femmodel from input files: */
+	profiler->Tag(StartInit);
+	this->InitFromBuffers((char*)buffer,buffersize,toolkits, solution_type,trace,NULL);
+	profiler->Tag(FinishInit);
+
+}
+/*}}}*/
+void FemModel::InitFromBuffers(char* buffer, int buffersize, char* toolkits, int in_solution_type, bool trace, IssmPDouble* X){/*{{{*/
+
+	/*intermediary*/
+	int         i;
+	int         analysis_type;
+	FILE       *IOMODEL = NULL;
+	FILE       *toolkitsoptionsfid = NULL;
+	FILE       *output_fid = NULL;
+	int         my_rank;
+	size_t      outputsize;
+	char       *outputbuffer;
+	const char* rootpath=""; //needed for Dakota runs only, which we won't do here.
+
+	/*recover my_rank:*/
+	my_rank=IssmComm::GetRank();
+
+	/*Initialize internal data: */
+	this->solution_type    = in_solution_type;
+	this->analysis_counter = nummodels-1;   //point to last analysis_type carried out.
+	this->results          = new Results(); //not initialized by CreateDataSets
+	
+	/*Open input file on cpu 0 and create IoModel */
+	if(my_rank==0) IOMODEL = fmemopen((void*)buffer, buffersize, "rb");
+	IoModel* iomodel = new IoModel(IOMODEL,in_solution_type,trace,X);
+
+	/*Figure out what analyses are activated for this solution*/
+	SolutionAnalysesList(&this->analysis_type_list,&this->nummodels,iomodel,this->solution_type);
+
+	/*Open toolkits file: */
+	toolkitsoptionsfid=fmemopen((void*)toolkits, strlen(toolkits)+1, "r");
+
+	/*create datasets for all analyses*/
+	ModelProcessorx(&this->elements,&this->nodes,&this->vertices,&this->materials,&this->constraints,&this->loads,&this->parameters,iomodel,toolkitsoptionsfid,(char*)rootpath,this->solution_type,this->nummodels,this->analysis_type_list);
+
+	/*do the post-processing of the datasets to get an FemModel that can actually run analyses: */
+	for(i=0;i<nummodels;i++){
+
+		if(VerboseMProcessor()) _printf0_("   Processing finite element model of analysis " << EnumToStringx(analysis_type_list[i]) << ":\n");
+		analysis_type=analysis_type_list[i];
+		this->SetCurrentConfiguration(analysis_type);
+
+		if(i==0){
+			if(VerboseMProcessor()) _printf0_("      creating vertex PIDs\n");
+			VerticesDofx(vertices,parameters); //only call once, we only have one set of vertices
+		}
+
+		if(VerboseMProcessor()) _printf0_("      resolving node constraints\n");
+		SpcNodesx(nodes,constraints,parameters,analysis_type); 
+
+		if(VerboseMProcessor()) _printf0_("      creating nodal degrees of freedom\n");
+		NodesDofx(nodes,parameters,analysis_type);
+
+		if(VerboseMProcessor()) _printf0_("      configuring element and loads\n");
+		ConfigureObjectsx(elements, loads, nodes, vertices, materials,parameters);
+	}
+
+	/*Close input file and toolkits file descriptors: */
+	if(my_rank==0) fclose(IOMODEL);
+	fclose(toolkitsoptionsfid);
+
+	/*Open output file once for all and add output file descriptor to parameters*/
+	output_fid=open_memstream(&outputbuffer,&outputsize); 
+	if(output_fid==NULL)_error_("FemModel::InitFromBuffers error message: could not initialize output stream");
+	this->parameters->SetParam(output_fid,OutputFilePointerEnum);
+	
+	/*Clean up*/
+	delete iomodel;
+}/*}}}*/
+void FemModel::CleanUpJs(void){/*{{{*/
+
+	/*Intermediary*/
+	FILE *output_fid;
+
+	/*Close output file: */
+	this->parameters->FindParam(&output_fid,OutputFilePointerEnum);
+	fclose(output_fid);
+
+	/*Before we delete the profiler, report statistics for this run: */
+	profiler->Tag(Finish);  //final tagging
+	_printf0_("\n");
+	_printf0_("   "<<setw(40)<<left<<"FemModel initialization elapsed time:"<<profiler->DeltaTime(StartInit,FinishInit) << "\n");
+	_printf0_("   "<<setw(40)<<left<<"Core solution elapsed time:"<<profiler->DeltaTime(StartCore,FinishCore) << "\n");
+	_printf0_("\n");
+	_printf0_("   Total elapsed time: "
+				<<profiler->DeltaTimeModHour(Start,Finish)<<" hrs "
+				<<profiler->DeltaTimeModMin(Start,Finish)<<" min "
+				<<profiler->DeltaTimeModSec(Start,Finish)<<" sec"
+				);
+	_printf0_("\n");
+}
+/*}}}*/
+#endif
Index: /issm/trunk-jpl/src/c/classes/FemModel.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.h	(revision 19792)
+++ /issm/trunk-jpl/src/c/classes/FemModel.h	(revision 19793)
@@ -119,5 +119,12 @@
 		void HydrologyEPLupdateDomainx(IssmDouble* pEplcount);
 		void UpdateConstraintsL2ProjectionEPLx(IssmDouble* pL2count);
+
+		#ifdef _HAVE_JAVASCRIPT_
+		FemModel(IssmDouble* buffer, int buffersize, char* toolkits, char* solution, char* modelname,ISSM_MPI_Comm incomm, bool trace=false);
+		void InitFromBuffers(char* buffer, int buffersize, char* toolkits, int solution_type,bool trace,IssmPDouble* X=NULL);
+		void CleanUpJs(void);
+		#endif
 };
+		
 
 #endif
Index: /issm/trunk-jpl/src/m/array/arrayoperations.js
===================================================================
--- /issm/trunk-jpl/src/m/array/arrayoperations.js	(revision 19792)
+++ /issm/trunk-jpl/src/m/array/arrayoperations.js	(revision 19793)
@@ -112,8 +112,14 @@
 function IsArray(object) { //{{{
 
-	if( Object.prototype.toString.call( object ) === '[object Array]' ) {
-		return 1;
-	}
-	else return 0;
+	var type=Object.prototype.toString.call( object );
+	if( type === '[object Array]' ) return 1;
+	if( type === '[object Float64Array]' ) return 1;
+	if( type === '[object Float32Array]' ) return 1;
+	if( type === '[object Int32Array]' ) return 1;
+	if( type === '[object Int16Array]' ) return 1;
+	if( type === '[object Uint32Array]' ) return 1;
+	if( type === '[object Uint16Array]' ) return 1;
+	if( type === '[object Uint8Array]' ) return 1;
+	return 0;
 
 } //}}}
Index: /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.js
===================================================================
--- /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.js	(revision 19792)
+++ /issm/trunk-jpl/src/m/boundaryconditions/SetIceShelfBC.js	(revision 19793)
@@ -31,5 +31,6 @@
 	md.stressbalance.spcvy=NewArrayFill(md.mesh.numberofvertices,NaN);
 	md.stressbalance.spcvz=NewArrayFill(md.mesh.numberofvertices,NaN);
-	md.stressbalance.referential=NewArrayFill(md.mesh.numberofvertices,NaN);
+	md.stressbalance.referential=Create2DArray(md.mesh.numberofvertices,6);
+	for(var i=0;i<md.mesh.numberofvertices;i++)for(var j=0;j<6;j++)md.stressbalance.referential[i][j]=NaN;
 	md.stressbalance.loadingforce=NewArrayFill(md.mesh.numberofvertices,0);
 
@@ -82,5 +83,5 @@
 
 	//Deal with other boundary conditions
-	if (md.balancethickness.thickening_rate === NaN){
+	if (isNaN(md.balancethickness.thickening_rate)){
 		md.balancethickness.thickening_rate=NewArrayFill(md.mesh.numberofvertices,0);
 		console.log('      no balancethickness.thickening_rate specified: values set as zero');
Index: /issm/trunk-jpl/src/m/classes/SMBforcing.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBforcing.js	(revision 19792)
+++ /issm/trunk-jpl/src/m/classes/SMBforcing.js	(revision 19793)
@@ -21,5 +21,5 @@
 		this.initialize = function(md) {// {{{
 
-			if (self.mass_balance === NaN){
+			if (isNaN(self.mass_balance)){
 				self.mass_balance=NewArrayFill(md.mesh.numberofvertices,0);
 				console.log('      no smb.mass_balance specified: values set as zero');
@@ -47,16 +47,17 @@
 			//process requested outputs
 			outputs = this.requested_outputs;
-			for (var i=0;i<outputs;i++){
+			for (var i=0;i<outputs.length;i++){
 				if (outputs[i] == 'default') {
 					outputs.splice(i,1);
-					outputs.push(this.defaultoutputs());
+					newoutputs=this.defaultoutputs(md);
+					for (var j=0;j<newoutputs.length;j++) outputs.push(newoutputs[j]);
 				}
 			}
-			WriteData(fid,'data',outputs,'enum',SmbRequestedOutputsEnum,'format','StringArray');
+			WriteData(fid,'data',outputs,'enum',SmbRequestedOutputsEnum(),'format','StringArray');
 
 		}//}}}
 	//properties 
 	this.mass_balance = NaN;
-	this.requested_outputs      = [''];
+	this.requested_outputs      = [];
 	this.setdefaultparameters();
 }
Index: /issm/trunk-jpl/src/m/classes/balancethickness.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/balancethickness.js	(revision 19792)
+++ /issm/trunk-jpl/src/m/classes/balancethickness.js	(revision 19793)
@@ -38,5 +38,5 @@
 
 			WriteData(fid,'object',this,'fieldname','spcthickness','format','DoubleMat','mattype',1);
-			WriteData(fid,'object',this,'fieldname','thickening_rate','format','DoubleMat','mattype',1,'scale',1./yts);
+			WriteData(fid,'object',this,'fieldname','thickening_rate','format','DoubleMat','mattype',1,'scale',1/yts);
 			WriteData(fid,'object',this,'fieldname','stabilization','format','Integer');
 			WriteData(fid,'object',this,'fieldname','omega','format','DoubleMat','mattype',1);
Index: /issm/trunk-jpl/src/m/classes/basalforcings.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/basalforcings.js	(revision 19792)
+++ /issm/trunk-jpl/src/m/classes/basalforcings.js	(revision 19793)
@@ -22,10 +22,10 @@
 		this.initialize = function (md){ // {{{
 
-			if (this.groundedice_melting_rate === NaN){
+			if (isNaN(this.groundedice_melting_rate)){
 				this.groundedice_melting_rate=NewArrayFill(md.mesh.numberofvertices,0);
 				console.log('      no basalforcings.groundedice_melting_rate specified: values set as zero');
 			}
 
-			if (this.floatingice_melting_rate === NaN){
+			if (isNaN(this.floatingice_melting_rate)){
 				this.floatingice_melting_rate=NewArrayFill(md.mesh.numberofvertices,0);
 				console.log('      no basalforcings.floatingice_melting_rate specified: values set as zero');
Index: /issm/trunk-jpl/src/m/classes/clusters/generic.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/generic.js	(revision 19792)
+++ /issm/trunk-jpl/src/m/classes/clusters/generic.js	(revision 19793)
@@ -36,4 +36,7 @@
 		console.log(sprintf('    shell: %s',this.shell));
 	}// }}}
+	this.classname= function(){// {{{
+		return "generic";
+	}// }}}
 		this.checkconsistency = function (md,solution,analyses) { //{{{
 			if (cluster.np<1){
Index: /issm/trunk-jpl/src/m/classes/clusters/local.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/local.js	(revision 19793)
+++ /issm/trunk-jpl/src/m/classes/clusters/local.js	(revision 19793)
@@ -0,0 +1,22 @@
+//LOCAL cluster class definition
+//
+//   Usage:
+//      local=new local();
+
+function local (){
+	//methods
+	this.setdefaultparameters = function(){// {{{
+	}// }}}
+	this.disp= function(){// {{{
+		console.log(sprintf('   local cluster class echo: []'));
+	}// }}}
+	this.classname= function(){// {{{
+		return "local";
+	}// }}}
+		this.checkconsistency = function (md,solution,analyses) { //{{{
+		} //}}}
+	//properties 
+	// {{{
+	this.setdefaultparameters();
+	//}}}
+}
Index: /issm/trunk-jpl/src/m/classes/damage.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/damage.js	(revision 19792)
+++ /issm/trunk-jpl/src/m/classes/damage.js	(revision 19793)
@@ -87,5 +87,5 @@
 			}
 			else if (this.law!=0){
-				if (solution==DamageEvolutionSolutionEnum){
+				if (solution==DamageEvolutionSolutionEnum()){
 					throw Error('Invalid evolution law (md.damage.law) for a damage solution');
 				}
@@ -116,5 +116,5 @@
 			//process requested outputs
 			outputs = this.requested_outputs;
-			for (var i=0;i<outputs;i++){
+			for (var i=0;i<outputs.length;i++){
 				if (outputs[i] == 'default') {
 					outputs.splice(i,1);
@@ -123,5 +123,5 @@
 			}
 			if (this.isdamage){
-				WriteData(fid,'data',outputs,'enum',DamageEvolutionRequestedOutputsEnum,'format','StringArray');
+				WriteData(fid,'data',outputs,'enum',DamageEvolutionRequestedOutputsEnum(),'format','StringArray');
 			}
 
@@ -129,5 +129,5 @@
 		this.defaultoutputs = function(md){ //{{{
 
-			if (md.domaintype() == '2Dhorizontal') return 'DamageDbar';
+			if (md.mesh.domaintype() == '2Dhorizontal') return 'DamageDbar';
 			else return 'DamageD';
 
@@ -155,5 +155,5 @@
 	this.healing             = 0;
 	this.equiv_stress		  = 0;
-	this.requested_outputs   = [''];
+	this.requested_outputs   = [];
 
 	this.setdefaultparameters();
Index: /issm/trunk-jpl/src/m/classes/friction.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/friction.js	(revision 19792)
+++ /issm/trunk-jpl/src/m/classes/friction.js	(revision 19793)
@@ -32,5 +32,5 @@
 			var yts=365.0*24.0*3600.0;
 
-			WriteData(fid,'enum',FrictionLawEnum,'data',1,'format','Integer');
+			WriteData(fid,'enum',FrictionLawEnum(),'data',1,'format','Integer');
 			WriteData(fid,'object',this,'fieldname','coefficient','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
 			//WriteData(fid,'object',this,'fieldname','coefficient','format','DoubleMat','mattype',1);
Index: /issm/trunk-jpl/src/m/classes/geometry.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/geometry.js	(revision 19792)
+++ /issm/trunk-jpl/src/m/classes/geometry.js	(revision 19793)
@@ -55,4 +55,3 @@
 		this.setdefaultparameters();
 		//}}}
-
 }
Index: /issm/trunk-jpl/src/m/classes/initialization.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/initialization.js	(revision 19792)
+++ /issm/trunk-jpl/src/m/classes/initialization.js	(revision 19793)
@@ -35,5 +35,5 @@
 				checkfield(md,'fieldname','initialization.vy','NaN',1,'size',[md.mesh.numberofvertices, 1]);
 			}
-			if(ArrayAnyEqual(ArrayIsMember(BalancethicknessSolutionEnum(),analyses),1) & (solution==BalancethicknessSolutionEnum)){
+			if(ArrayAnyEqual(ArrayIsMember(BalancethicknessSolutionEnum(),analyses),1) & (solution==BalancethicknessSolutionEnum())){
 				checkfield(md,'fieldname','initialization.vx','NaN',1,'size',[md.mesh.numberofvertices, 1]);
 				checkfield(md,'fieldname','initialization.vy','NaN',1,'size',[md.mesh.numberofvertices, 1]);
@@ -85,14 +85,14 @@
 			var yts=365.0*24.0*3600.0;
 
-			WriteData(fid,'data',this.vx,'format','DoubleMat','mattype',1,'enum',VxEnum,'scale',1./yts);
-			WriteData(fid,'data',this.vy,'format','DoubleMat','mattype',1,'enum',VyEnum,'scale',1./yts);
-			WriteData(fid,'data',this.vz,'format','DoubleMat','mattype',1,'enum',VzEnum,'scale',1./yts);
-			WriteData(fid,'data',this.pressure,'format','DoubleMat','mattype',1,'enum',PressureEnum);
-			WriteData(fid,'data',this.temperature,'format','DoubleMat','mattype',1,'enum',TemperatureEnum);
-			WriteData(fid,'data',this.waterfraction,'format','DoubleMat','mattype',1,'enum',WaterfractionEnum);
-			WriteData(fid,'data',this.sediment_head,'format','DoubleMat','mattype',1,'enum',SedimentHeadEnum);
-			WriteData(fid,'data',this.epl_head,'format','DoubleMat','mattype',1,'enum',EplHeadEnum);
-			WriteData(fid,'data',this.epl_thickness,'format','DoubleMat','mattype',1,'enum',HydrologydcEplThicknessEnum);
-			WriteData(fid,'data',this.watercolumn,'format','DoubleMat','mattype',1,'enum',WatercolumnEnum);
+			WriteData(fid,'data',this.vx,'format','DoubleMat','mattype',1,'enum',VxEnum(),'scale',1./yts);
+			WriteData(fid,'data',this.vy,'format','DoubleMat','mattype',1,'enum',VyEnum(),'scale',1./yts);
+			WriteData(fid,'data',this.vz,'format','DoubleMat','mattype',1,'enum',VzEnum(),'scale',1./yts);
+			WriteData(fid,'data',this.pressure,'format','DoubleMat','mattype',1,'enum',PressureEnum());
+			WriteData(fid,'data',this.temperature,'format','DoubleMat','mattype',1,'enum',TemperatureEnum());
+			WriteData(fid,'data',this.waterfraction,'format','DoubleMat','mattype',1,'enum',WaterfractionEnum());
+			WriteData(fid,'data',this.sediment_head,'format','DoubleMat','mattype',1,'enum',SedimentHeadEnum());
+			WriteData(fid,'data',this.epl_head,'format','DoubleMat','mattype',1,'enum',EplHeadEnum());
+			WriteData(fid,'data',this.epl_thickness,'format','DoubleMat','mattype',1,'enum',HydrologydcEplThicknessEnum());
+			WriteData(fid,'data',this.watercolumn,'format','DoubleMat','mattype',1,'enum',WatercolumnEnum());
 
 			if (md.thermal.isenthalpy){
Index: /issm/trunk-jpl/src/m/classes/masstransport.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/masstransport.js	(revision 19792)
+++ /issm/trunk-jpl/src/m/classes/masstransport.js	(revision 19793)
@@ -68,11 +68,12 @@
 			//process requested outputs
 			outputs = this.requested_outputs;
-			for (var i=0;i<outputs;i++){
+			for (var i=0;i<outputs.length;i++){
 				if (outputs[i] == 'default') {
 					outputs.splice(i,1);
-					outputs.push(this.defaultoutputs());
+					newoutputs=this.defaultoutputs(md);
+					for (var j=0;j<newoutputs.length;j++) outputs.push(newoutputs[j]);
 				}
 			}
-			WriteData(fid,'data',outputs,'enum',MasstransportRequestedOutputsEnum,'format','StringArray');
+			WriteData(fid,'data',outputs,'enum',MasstransportRequestedOutputsEnum(),'format','StringArray');
 		}//}}}
 		this.defaultoutputs = function(md) { //{{{
@@ -89,5 +90,5 @@
 	this.vertex_pairing         = NaN;
 	this.penalty_factor         = 0;
-	this.requested_outputs      = [''];
+	this.requested_outputs      = [];
 
 	this.setdefaultparameters();
Index: /issm/trunk-jpl/src/m/classes/model.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/model.js	(revision 19792)
+++ /issm/trunk-jpl/src/m/classes/model.js	(revision 19793)
@@ -66,5 +66,5 @@
 			this.settings         = new settings();
 			this.toolkits         = new toolkits();
-			this.cluster          = new generic();
+			this.cluster          = new local();
 			this.balancethickness = new balancethickness();
 			this.stressbalance    = new stressbalance();
Index: /issm/trunk-jpl/src/m/classes/outputdefinition.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/outputdefinition.js	(revision 19792)
+++ /issm/trunk-jpl/src/m/classes/outputdefinition.js	(revision 19793)
@@ -7,5 +7,5 @@
 	//methods
 	this.setdefaultparameters = function(){// {{{
-		this.definitions={};
+		this.definitions=[];
 	}// }}}
 	this.disp= function(){// {{{
@@ -41,5 +41,5 @@
 	//properties 
 	// {{{
-	this.definitions                 = {};
+	this.definitions                 = [];
 	this.setdefaultparameters();
 	//}}}
Index: /issm/trunk-jpl/src/m/classes/qmu.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/qmu.js	(revision 19792)
+++ /issm/trunk-jpl/src/m/classes/qmu.js	(revision 19793)
@@ -103,5 +103,5 @@
 			WriteData(fid,'object',this,'fieldname','isdakota','format','Boolean');
 			if (!this.isdakota){
-				WriteData(fid,'data',false,'enum',QmuMassFluxSegmentsPresentEnum,'format','Boolean');
+				WriteData(fid,'data',false,'enum',QmuMassFluxSegmentsPresentEnum(),'format','Boolean');
 				return; 
 			}
@@ -112,9 +112,9 @@
 			WriteData(fid,'object',this,'fieldname','responsedescriptors','format','StringArray');
 			if (this.mass_flux_segments.length){
-				WriteData(fid,'data',this.mass_flux_segments,'enum',MassFluxSegmentsEnum,'format','MatArray');
+				WriteData(fid,'data',this.mass_flux_segments,'enum',MassFluxSegmentsEnum(),'format','MatArray');
 				flag=true; 
 			}
 			else flag=false; 
-			WriteData(fid,'data',flag,'enum',QmuMassFluxSegmentsPresentEnum,'format','Boolean');
+			WriteData(fid,'data',flag,'enum',QmuMassFluxSegmentsPresentEnum(),'format','Boolean');
 		}//}}}
 	//properties 
Index: /issm/trunk-jpl/src/m/classes/steadystate.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/steadystate.js	(revision 19792)
+++ /issm/trunk-jpl/src/m/classes/steadystate.js	(revision 19793)
@@ -52,11 +52,12 @@
 			//process requested outputs
 			outputs = this.requested_outputs;
-			for (var i=0;i<outputs;i++){
+			for (var i=0;i<outputs.length;i++){
 				if (outputs[i] == 'default') {
 					outputs.splice(i,1);
-					outputs.push(this.defaultoutputs());
+					newoutputs=this.defaultoutputs(md);
+					for (var j=0;j<newoutputs.length;j++) outputs.push(newoutputs[j]);
 				}
 			}
-			WriteData(fid,'data',outputs,'enum',SteadystateRequestedOutputsEnum,'format','StringArray');
+			WriteData(fid,'data',outputs,'enum',SteadystateRequestedOutputsEnum(),'format','StringArray');
 		}//}}}
 		this.defaultoutputs = function(md) { //{{{
@@ -64,6 +65,6 @@
 			var list=[];
 
-			for (var i=0;i<md.stressbalance.defaultoutputs().length;i++)list.push(md.stressbalance.defaultoutputs()[i]);
-			for (var i=0;i<md.thermal.defaultoutputs().length;i++)list.push(md.thermal.defaultoutputs()[i]);
+			for (var i=0;i<md.stressbalance.defaultoutputs(md).length;i++)list.push(md.stressbalance.defaultoutputs(md)[i]);
+			for (var i=0;i<md.thermal.defaultoutputs(md).length;i++)list.push(md.thermal.defaultoutputs(md)[i]);
 
 			return list;
Index: /issm/trunk-jpl/src/m/classes/stressbalance.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/stressbalance.js	(revision 19792)
+++ /issm/trunk-jpl/src/m/classes/stressbalance.js	(revision 19793)
@@ -162,17 +162,18 @@
 			lz=NewArrayFill(this.loadingforce.length,0); for(var i=0;i<lx.length;i++)lz[i]=this.loadingforce[i][2];
 
-			WriteData(fid,'data',lx,'format','DoubleMat','mattype',1,'enum',LoadingforceXEnum);
-			WriteData(fid,'data',ly,'format','DoubleMat','mattype',1,'enum',LoadingforceYEnum);
-			WriteData(fid,'data',lz,'format','DoubleMat','mattype',1,'enum',LoadingforceZEnum);
+			WriteData(fid,'data',lx,'format','DoubleMat','mattype',1,'enum',LoadingforceXEnum());
+			WriteData(fid,'data',ly,'format','DoubleMat','mattype',1,'enum',LoadingforceYEnum());
+			WriteData(fid,'data',lz,'format','DoubleMat','mattype',1,'enum',LoadingforceZEnum());
 
 			//process requested outputs
 			outputs = this.requested_outputs;
-			for (var i=0;i<outputs;i++){
+			for (var i=0;i<outputs.length;i++){
 				if (outputs[i] == 'default') {
 					outputs.splice(i,1);
-					outputs.push(this.defaultoutputs());
-				}
-			}			
-			WriteData(fid,'data',outputs,'enum',StressbalanceRequestedOutputsEnum,'format','StringArray');
+					newoutputs=this.defaultoutputs(md);
+					for (var j=0;j<newoutputs.length;j++) outputs.push(newoutputs[j]);
+				}
+			}
+			WriteData(fid,'data',outputs,'enum',StressbalanceRequestedOutputsEnum(),'format','StringArray');
 		}//}}}
 		this.defaultoutputs = function(md){ // {{{
@@ -204,5 +205,5 @@
 	this.referential            = NaN;
 	this.loadingforce           = NaN;
-	this.requested_outputs      = ['']
+	this.requested_outputs      = []
 
 	this.setdefaultparameters();
Index: /issm/trunk-jpl/src/m/classes/thermal.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/thermal.js	(revision 19792)
+++ /issm/trunk-jpl/src/m/classes/thermal.js	(revision 19793)
@@ -97,8 +97,9 @@
 			//process requested outputs
 			outputs = this.requested_outputs;
-			for (var i=0;i<outputs;i++){
+			for (var i=0;i<outputs.length;i++){
 				if (outputs[i] == 'default') {
 					outputs.splice(i,1);
-					outputs.push(this.defaultoutputs());
+					newoutputs=this.defaultoutputs(md);
+					for (var j=0;j<newoutputs.length;j++) outputs.push(newoutputs[j]);
 				}
 			}
Index: /issm/trunk-jpl/src/m/classes/toolkits.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/toolkits.js	(revision 19792)
+++ /issm/trunk-jpl/src/m/classes/toolkits.js	(revision 19793)
@@ -47,4 +47,48 @@
 		}
 	} // }}}
+		 this.ToolkitsFile = function(filename) { //{{{
+		 //TOOLKITSFILE - build toolkits file (in string format)
+		 //
+		 //   Build a Petsc compatible options string, from the toolkits model field  + return options string. 
+		 //   This file string will also be used when the toolkit used is 'issm' instead of 'petsc'
+		 //
+		 //   Usage:     var toolkitsstring = toolkits.ToolkitsFile();
+
+			 var string = '';
+
+			 //write header
+			 string += sprintf('%s%s%s\n','\%Toolkits options file: ',filename,' written from Javascript toolkits array');
+
+			 //start writing options
+			 for (var analysis in this){
+				 
+				 if(typeof this[analysis] == 'object') options=this[analysis]; else continue;
+
+				 //first write analysis:
+				 string += sprintf('\n+%s\n',analysis); //append a + to recognize it's an analysis enum
+
+				 //now, write options
+			
+				 for(var optionname in options){
+					 optionvalue=options[optionname];
+
+					 if (optionvalue.length==0){
+						 //this option has only one argument
+						 string+=sprintf('-%s\n',optionname);
+					 }
+					 else{
+						 //option with value. value can be string or scalar
+						 if (typeof optionvalue == 'number'){
+							 string+=sprintf('-%s %g\n',optionname,optionvalue);
+						 }
+						 else if (typeof optionvalue == 'string'){
+							 string+=sprintf('-%s %s\n',optionname,optionvalue);
+						 }
+						 else throw Error(sprintf("ToolkitsFile error: option '%s' is not well formatted",optionname));
+					 }
+				 }
+			 }
+			 return string;
+		 } //}}}
 	//properties 
 	// {{{
Index: /issm/trunk-jpl/src/m/classes/transient.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/transient.js	(revision 19792)
+++ /issm/trunk-jpl/src/m/classes/transient.js	(revision 19793)
@@ -76,11 +76,12 @@
 			//process requested outputs
 			outputs = this.requested_outputs;
-			for (var i=0;i<outputs;i++){
+			for (var i=0;i<outputs.length;i++){
 				if (outputs[i] == 'default') {
 					outputs.splice(i,1);
-					outputs.push(this.defaultoutputs());
+					newoutputs=this.defaultoutputs(md);
+					for (var j=0;j<newoutputs.length;j++) outputs.push(newoutputs[j]);
 				}
 			}			
-			WriteData(fid,'data',outputs,'enum',TransientRequestedOutputsEnum,'format','StringArray');
+			WriteData(fid,'data',outputs,'enum',TransientRequestedOutputsEnum(),'format','StringArray');
 		}//}}}
 		this.defaultoutputs = function(md) { //{{{
Index: /issm/trunk-jpl/src/m/classes/verbose.js
===================================================================
--- /issm/trunk-jpl/src/m/classes/verbose.js	(revision 19792)
+++ /issm/trunk-jpl/src/m/classes/verbose.js	(revision 19793)
@@ -29,13 +29,13 @@
 		//BEGINDISP
 		console.log(sprintf('verbose class echo:'));
-		console.log(sprintf('   %15s : %s','mprocessor',mat2str(verbose.mprocessor)));
-		console.log(sprintf('   %15s : %s','module',mat2str(verbose.module)));
-		console.log(sprintf('   %15s : %s','solution',mat2str(verbose.solution)));
-		console.log(sprintf('   %15s : %s','solver',mat2str(verbose.solver)));
-		console.log(sprintf('   %15s : %s','convergence',mat2str(verbose.convergence)));
-		console.log(sprintf('   %15s : %s','control',mat2str(verbose.control)));
-		console.log(sprintf('   %15s : %s','qmu',mat2str(verbose.qmu)));
-		console.log(sprintf('   %15s : %s','autodiff',mat2str(verbose.autodiff)));
-		console.log(sprintf('   %15s : %s','smb',mat2str(verbose.smb)));
+		console.log(sprintf('   %s : %i','mprocessor',this.mprocessor));
+		console.log(sprintf('   %s : %i','module',this.module));
+		console.log(sprintf('   %s : %i','solution',this.solution));
+		console.log(sprintf('   %s : %i','solver',this.solver));
+		console.log(sprintf('   %s : %i','convergence',this.convergence));
+		console.log(sprintf('   %s : %i','control',this.control));
+		console.log(sprintf('   %s : %i','qmu',this.qmu));
+		console.log(sprintf('   %s : %i','autodiff',this.autodiff));
+		console.log(sprintf('   %s : %i','smb',this.smb));
 		//ENDDISP
 	}// }}}
@@ -50,13 +50,13 @@
 			//BEGINVERB2BIN
 			var binary=0;
-			if (verbose.mprocessor) binary=Math.bitOr(binary1); 
-			if (verbose.module) binary=Math.bitOr(binary2); 
-			if (verbose.solution) binary=Math.bitOr(binary4); 
-			if (verbose.solver) binary=Math.bitOr(binary8); 
-			if (verbose.convergence) binary=Math.bitOr(binary16); 
-			if (verbose.control) binary=Math.bitOr(binary32); 
-			if (verbose.qmu) binary=Math.bitOr(binary64); 
-			if (verbose.autodiff) binary=Math.bitOr(binary128); 
-			if (verbose.smb) binary=Math.bitOr(binary256); 
+			if (this.mprocessor) binary=binary|1; 
+			if (this.module) binary=binary|2; 
+			if (this.solution) binary=binary|4; 
+			if (this.solver) binary=binary|8; 
+			if (this.convergence) binary=binary|16; 
+			if (this.control) binary=binary|32; 
+			if (this.qmu) binary=binary|64; 
+			if (this.autodiff) binary=binary|128; 
+			if (this.smb) binary=binary|256; 
 			//ENDVERB2BIN
 			return binary;
Index: /issm/trunk-jpl/src/m/io/fileptr.js
===================================================================
--- /issm/trunk-jpl/src/m/io/fileptr.js	(revision 19792)
+++ /issm/trunk-jpl/src/m/io/fileptr.js	(revision 19793)
@@ -73,5 +73,5 @@
 		} //}}}
 		this.rawbuffer = function () { //{{{
-			return this.buffer;
+			return this.buffer.slice(0,this.ptr);
 		} //}}}
 		this.resize = function () { //{{{
Index: /issm/trunk-jpl/src/m/plot/processdata.js
===================================================================
--- /issm/trunk-jpl/src/m/plot/processdata.js	(revision 19792)
+++ /issm/trunk-jpl/src/m/plot/processdata.js	(revision 19793)
@@ -15,5 +15,5 @@
 
 	//check format
-	if ( data.length ==0 | data === [] | typeof data === 'number' | data === NaN ){
+	if ( data.length ==0 | data === [] | typeof data === 'number' | isNaN(data) ){
 		throw Error('plotmodel error message: data provided is empty');
 	}
Index: /issm/trunk-jpl/src/m/solve/WriteData.js
===================================================================
--- /issm/trunk-jpl/src/m/solve/WriteData.js	(revision 19792)
+++ /issm/trunk-jpl/src/m/solve/WriteData.js	(revision 19793)
@@ -172,4 +172,5 @@
 		var s=[data.length,1];
 		if(IsArray(data[0]))s[1]=data[0].length;
+		if(typeof data == 'number'){s[0]=1; s[1]=1}
 
 		//if matrix = NaN, then do not write anything
Index: /issm/trunk-jpl/src/m/solve/solve.js
===================================================================
--- /issm/trunk-jpl/src/m/solve/solve.js	(revision 19792)
+++ /issm/trunk-jpl/src/m/solve/solve.js	(revision 19793)
@@ -107,67 +107,81 @@
 
 	//Write all input files
-	marshall(md);                                          // bin file
-	ToolkitsFile(md.toolkits,md.miscellaneous.name + '.toolkits'); // toolkits file
-	cluster.BuildQueueScript(md.private.runtimename,md.miscellaneous.name,md.private.solution,md.settings.io_gather,md.debug.valgrind,md.debug.gprof,md.qmu.isdakota); // queue file
+	fid = marshall(md);                                          // bin file
+	toolkitsstring= md.toolkits.ToolkitsFile(md.miscellaneous.name + '.toolkits'); // toolkits file
 
-	//Stop here if batch mode
-	if (options.getfieldvalue('batch','no') === 'yes'){
-		if (md.verbose.solution){
-			console.log('batch mode requested: not launching job interactively');
-			console.log('launch solution sequence on remote cluster by hand');
+	if (cluster.classname() != 'local'){ //{{{
+
+		throw Error('non local clusters not supported yet!');
+
+		cluster.BuildQueueScript(md.private.runtimename,md.miscellaneous.name,md.private.solution,md.settings.io_gather,md.debug.valgrind,md.debug.gprof,md.qmu.isdakota); // queue file
+
+		//Stop here if batch mode
+		if (options.getfieldvalue('batch','no') === 'yes'){
+			if (md.verbose.solution){
+				console.log('batch mode requested: not launching job interactively');
+				console.log('launch solution sequence on remote cluster by hand');
+			}
+			return;
 		}
-		return;
-	}
 
-	//Upload all required files
-	modelname = md.miscellaneous.name;
-	filelist  = [modelname + '.bin ',modelname + '.toolkits '];
-	if (ispc){
-		filelist.push(modelname + '.bat ');
-	}
-	else{
-		filelist.push(modelname + '.queue ');
-	}
+		//Upload all required files
+		modelname = md.miscellaneous.name;
+		filelist  = [modelname + '.bin ',modelname + '.toolkits '];
+		if (ispc){
+			filelist.push(modelname + '.bat ');
+		}
+		else{
+			filelist.push(modelname + '.queue ');
+		}
 
-	if (md.qmu.isdakota){
-		filelist.push(modelname + '.qmu.in');
-	}
+		if (md.qmu.isdakota){
+			filelist.push(modelname + '.qmu.in');
+		}
 
-	if (restart == ''){
-		cluster.UploadQueueJob(md.miscellaneous.name,md.private.runtimename,filelist);
-	}
+		if (restart == ''){
+			cluster.UploadQueueJob(md.miscellaneous.name,md.private.runtimename,filelist);
+		}
 
-	//launch queue job: 
-	cluster.LaunchQueueJob(md.miscellaneous.name,md.private.runtimename,filelist,restart);
+		//launch queue job: 
+		cluster.LaunchQueueJob(md.miscellaneous.name,md.private.runtimename,filelist,restart);
 
-	//wait on lock
-	if (md.settings.waitonlock == 'NaN'){
-		//load when user enters 'y'
-		console.log('solution launched on remote cluster. log in to detect job completion.');
-		throw Error("solve error message: user detection of successfull completion of job not support yet!");
-		/*choice=input('Is the job successfully completed? (y/n)','s');
-		if ~strcmp(choice,'y'), 
-			console.log('Results not loaded... exiting'); 
-		else
-			md=loadresultsfromcluster(md);
-		end*/
-	}
-	else if (md.settings.waitonlock>0){
-		//we wait for the done file
-		done=waitonlock(md);
-		if (md.verbose.solution){
-			console.log('loading results from cluster');
+		//wait on lock
+		if (md.settings.waitonlock == 'NaN'){
+			//load when user enters 'y'
+			console.log('solution launched on remote cluster. log in to detect job completion.');
+			throw Error("solve error message: user detection of successfull completion of job not support yet!");
+			/*choice=input('Is the job successfully completed? (y/n)','s');
+			  if ~strcmp(choice,'y'), 
+			  console.log('Results not loaded... exiting'); 
+			  else
+			  md=loadresultsfromcluster(md);
+			  end*/
 		}
-		loadresultsfromcluster(md);
-	}
-	else if (md.settings.waitonlock==0){
-		 console.log('Model results must be loaded manually with md=loadresultsfromcluster(md);');
-	}
+		else if (md.settings.waitonlock>0){
+			//we wait for the done file
+			done=waitonlock(md);
+			if (md.verbose.solution){
+				console.log('loading results from cluster');
+			}
+			loadresultsfromcluster(md);
+		}
+		else if (md.settings.waitonlock==0){
+			console.log('Model results must be loaded manually with md=loadresultsfromcluster(md);');
+		}
 
-	//post processes qmu results if necessary
-	if (md.qmu.isdakota){
-		/*if ~strncmpi(options.getfieldvalue('keep','y'),'y',1)
-			system(['rm -rf qmu' num2str(feature('GetPid'))]);
-		end*/
+		//post processes qmu results if necessary
+		if (md.qmu.isdakota){
+			/*if ~strncmpi(options.getfieldvalue('keep','y'),'y',1)
+			  system(['rm -rf qmu' num2str(feature('GetPid'))]);
+			  end*/
+		}
+	} //}}}
+	else{ //if (cluster.classname() == 'local') 
+
+		/*We are running locally on the machine, using the issm module:*/
+		console.log('running issm locally');
+		
+		//Call issm:
+		issm(fid, toolkitsstring, solutionstring, md.miscellaneous.name);
 	}
 }
Index: /issm/trunk-jpl/src/wrappers/Issm/issm.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/Issm/issm.cpp	(revision 19793)
+++ /issm/trunk-jpl/src/wrappers/Issm/issm.cpp	(revision 19793)
@@ -0,0 +1,41 @@
+/*!\file:  issm.cpp
+ * \brief: ISSM main program
+ */ 
+
+#include "../../c/main/issm.h"
+
+extern "C" { 
+	int IssmModule(double* buffer, int buffersize, char* toolkits,char* solution,char* modelname){
+
+		/*Initialize exception trapping: */
+		ExceptionTrapBegin();
+
+		/*Initialize environment: */
+		ISSM_MPI_Comm comm_init=EnvironmentInit(0,NULL);
+
+		/*Initialize femmodel from arguments provided command line: */
+		FemModel *femmodel = new FemModel(buffer,buffersize,toolkits,solution,modelname,comm_init);
+
+		/*Solve: */
+		femmodel->Solve();
+
+		/*Output results: */
+		OutputResultsx(femmodel);
+
+		/*Wrap up: */
+		femmodel->CleanUpJs();
+
+		/*Delete Model: */
+		delete femmodel;
+		
+		/*Finalize environment:*/
+		EnvironmentFinalize();
+
+		/*Finalize exception trapping: */
+		ExceptionTrapEnd();
+
+		/*Return unix success: */
+		return 0; 
+
+	} 
+} //extern "C" 
Index: /issm/trunk-jpl/src/wrappers/Issm/issm.js
===================================================================
--- /issm/trunk-jpl/src/wrappers/Issm/issm.js	(revision 19793)
+++ /issm/trunk-jpl/src/wrappers/Issm/issm.js	(revision 19793)
@@ -0,0 +1,26 @@
+function issm(fid,toolkitstring,solutionstring,modelname){
+/*issm 
+	   usage: var output = issm(fid,toolkitstring);
+	      where: fid is a pointer to a memory buffer created by marshall, toolkitstring is a toolkits 
+		  string created by ToolkitsToFile and 
+		  output is a binary buffer to be read by loadresultsfromcluster.
+*/
+
+	var binarybuffer=fid.rawbuffer(); //binarybuffer is now an arraybuffer
+	var nb = fid.ptr; //size of array buffer in bytes.
+
+	/*var dbinary=new Float64Array(binarybuffer); var nb=dbinary.length * dbinary.BYTES_PER_ELEMENT;
+	var dbinaryPtr= Module._malloc(nb); var binHeap = new Uint8Array(Module.HEAPU8.buffer,dbinaryPtr,nb);
+	binHeap.set(new Uint8Array(dbinary.buffer)); var binary=binHeap.byteOffset;*/
+
+	var dbinaryPtr= Module._malloc(nb); var binHeap = new Uint8Array(Module.HEAPU8.buffer,dbinaryPtr,nb);
+	binHeap.set(new Uint8Array(binarybuffer)); var binary=binHeap.byteOffset;
+
+	//Declare TriMesh module: 
+	issmmodule= Module.cwrap('IssmModule','number',['number','number','string','string','string']);
+	
+	//Call issm:
+	var output = issmmodule(binary, nb, toolkitstring,solutionstring,modelname);
+	
+	return output;
+}
Index: /issm/trunk-jpl/src/wrappers/javascript/Makefile.am
===================================================================
--- /issm/trunk-jpl/src/wrappers/javascript/Makefile.am	(revision 19792)
+++ /issm/trunk-jpl/src/wrappers/javascript/Makefile.am	(revision 19793)
@@ -14,5 +14,6 @@
 			   ../IssmConfig/IssmConfig.js\
 			   ../EnumToString/EnumToString.js\
-			   ../StringToEnum/StringToEnum.js
+			   ../StringToEnum/StringToEnum.js\
+			   ../Issm/issm.js
 	
 #javascript io{{{
@@ -84,7 +85,7 @@
 					 ../EnumToString/EnumToString.cpp\
 					 ../StringToEnum/StringToEnum.cpp\
-					 ../../c/main/issm.cpp
+					 ../Issm/issm.cpp
 
-IssmModule_CXXFLAGS= -fPIC -D_DO_NOT_LOAD_GLOBALS_ --memory-init-file 0 $(AM_CXXFLAGS) $(CXXFLAGS) $(CXXOPTFLAGS) $(COPTFLAGS) -s EXPORTED_FUNCTIONS="['_TriMeshModule','_NodeConnectivityModule','_ElementConnectivityModule','_InterpFromMeshToMesh2dModule','_IssmConfigModule','_EnumToStringModule','_StringToEnumModule','_main']"  -s DISABLE_EXCEPTION_CATCHING=0 -s ALLOW_MEMORY_GROWTH=1
-IssmModule_LDADD = ${deps} $(TRIANGLELIB) 
+IssmModule_CXXFLAGS= -fPIC -D_DO_NOT_LOAD_GLOBALS_  --memory-init-file 0 $(AM_CXXFLAGS) $(CXXFLAGS) $(CXXOPTFLAGS) $(COPTFLAGS) -s EXPORTED_FUNCTIONS="['_TriMeshModule','_NodeConnectivityModule','_ElementConnectivityModule','_InterpFromMeshToMesh2dModule','_IssmConfigModule','_EnumToStringModule','_StringToEnumModule','_IssmModule']"  -s DISABLE_EXCEPTION_CATCHING=0 -s ALLOW_MEMORY_GROWTH=1 -s INVOKE_RUN=0
+IssmModule_LDADD = ${deps} $(TRIANGLELIB)  $(GSLLIB)
 #}}}
Index: /issm/trunk-jpl/test/NightlyRun/test101.html
===================================================================
--- /issm/trunk-jpl/test/NightlyRun/test101.html	(revision 19792)
+++ /issm/trunk-jpl/test/NightlyRun/test101.html	(revision 19793)
@@ -50,5 +50,5 @@
 <script type="text/javascript" src="../../src/m/boundaryconditions/SetIceShelfBC.js"></script>
 <script type="text/javascript" src="../../src/m/parameterization/setflowequation.js"></script>
-<script type="text/javascript" src="../../src/m/classes/clusters/generic.js"></script>
+<script type="text/javascript" src="../../src/m/classes/clusters/local.js"></script>
 <script type="text/javascript" src="../../src/m/parameterization/setmask.js"></script>
 <script type="text/javascript" src="../../src/m/consistency/ismodelselfconsistent.js"></script>
@@ -81,6 +81,6 @@
 <script type="text/javascript" src="../../src/wrappers/ElementConnectivity/ElementConnectivity.js"></script>
 <script type="text/javascript" src="../../src/wrappers/InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.js"></script>
+<script type="text/javascript" src="../../src/wrappers/Issm/issm.js"></script>
 <script type="text/javascript" src="../../build-js/src/wrappers/javascript/IssmModule.js"></script>
-<script type="text/javascript" src="../../src/c/main/issm.js"></script>
 <script type="text/javascript" src="../../externalpackages/javascript/src/sprintf.js"></script>
 <script type="text/javascript" src="../../externalpackages/javascript/src/jquery.min.js"></script>
@@ -97,9 +97,10 @@
 	parameterize(md);
 	setflowequation(md,'SSA','all');
+	md.verbose.solution=1;  md.verbose.convergence=1;
 	md=solve(md,StressbalanceSolutionEnum(),'checkconsistency','no');
 
-	/*plotmodel(md,'data',md.initialization.vel,'colorbar','on','data',md.initialization.vx,
-	  'data',md.initialization.temperature, 'data',md.basalforcings.floatingice_melting_rate,'data','mesh');
-	//var output=issm([5,1,1]);*/
+	/*plotmodel(md,'data',md.initialization.vel,'colorbar','on','colorbarheight',.5,'data',md.initialization.vx,
+	  'data',md.initialization.temperature, 'data',md.basalforcings.floatingice_melting_rate,'data','mesh');*/
+	//var output=issm([5,1,1]);
 
 
Index: /issm/trunk-jpl/test/Par/SquareShelfConstrained.par
===================================================================
--- /issm/trunk-jpl/test/Par/SquareShelfConstrained.par	(revision 19792)
+++ /issm/trunk-jpl/test/Par/SquareShelfConstrained.par	(revision 19793)
@@ -11,4 +11,5 @@
 md.geometry.base=-md.materials.rho_ice/md.materials.rho_water*md.geometry.thickness;
 md.geometry.surface=md.geometry.base+md.geometry.thickness;
+md.geometry.bed=md.geometry.base-10;
 
 %Initial velocity 
