Index: /issm/trunk-jpl/src/m/plot/export_gl.py
===================================================================
--- /issm/trunk-jpl/src/m/plot/export_gl.py	(revision 19035)
+++ /issm/trunk-jpl/src/m/plot/export_gl.py	(revision 19035)
@@ -0,0 +1,112 @@
+def export_gl(md,varargin)
+
+	templist=plotoptions(varargin{:}); 
+	optionslist=templist.list;
+	options=optionslist{1};
+	options=checkplotoptions(md,options);
+
+	#Setup unique directory in present dir: 
+	directory=getfieldvalue(options,'directory','./');
+	databasename=getfieldvalue(options,'database','webgl');
+
+	#scaling factor: 
+	scaling_factor=getfieldvalue(options,'scaling_factor',50);
+
+	#Deal with title: 
+	if exist(options,'title')
+		title=getfieldvalue(options,'title');
+	else
+		title='';
+	end
+
+	#initialize model: 
+	model.title=title;
+	model.initialZoomFactor=getfieldvalue(options,'zoom',-.25);
+
+	#Deal with contour {{{
+
+	contour_lat1=md.mesh.lat(md.mesh.segments(:,1));
+	contour_lat2=md.mesh.lat(md.mesh.segments(:,2));
+	contour_long1=md.mesh.long(md.mesh.segments(:,1));
+	contour_long2=md.mesh.long(md.mesh.segments(:,2));
+	contour_surface1=md.geometry.surface(md.mesh.segments(:,1));
+	contour_surface2=md.geometry.surface(md.mesh.segments(:,2));
+
+	R1=6371000*ones(length(contour_surface1),1)+scaling_factor*contour_surface1;
+	R2=6371000*ones(length(contour_surface2),1)+scaling_factor*contour_surface2;
+
+	contourx1 = R1 .* cosd(contour_lat1) .* cosd(contour_long1);
+	contoury1 = R1 .* cosd(contour_lat1) .* sind(contour_long1);
+	contourz1 = R1 .* sind(contour_lat1);
+	
+	contourx2 = R2 .* cosd(contour_lat2) .* cosd(contour_long2);
+	contoury2 = R2 .* cosd(contour_lat2) .* sind(contour_long2);
+	contourz2 = R2 .* sind(contour_lat2);
+
+
+	model.contourx1=contourx1;
+	model.contoury1=contoury1;
+	model.contourz1=contourz1;
+	model.contourx2=contourx2;
+	model.contoury2=contoury2;
+	model.contourz2=contourz2;
+
+
+	#}}}
+#Deal with mesh and results {{{
+	
+	
+	lat=md.mesh.lat;
+	long=md.mesh.long;
+	surface=md.geometry.surface;
+	numberofelements=md.mesh.numberofelements;
+	numberofvertices=md.mesh.numberofvertices;
+
+	R=6371000*ones(numberofvertices,1)+scaling_factor*surface;
+
+	x = R .* cosd(lat) .* cosd(long);
+	y = R .* cosd(lat) .* sind(long);
+	z = R .* sind(lat);
+
+
+	#Deal with triangulation: 
+	model.index=md.mesh.elements;
+	model.x=x;
+	model.y=y;
+	model.z=z;
+	model.surface=surface;
+	
+	#Deal with data: 
+	results=struct([]);
+	for i=1:length(optionslist),
+		options=optionslist{i}; options=checkplotoptions(md,options);
+		data=getfieldvalue(options,'data');
+		results(i).data=data;
+		results(i).caxis=getfieldvalue(options,'caxis',[min(data(:)) max(data(:))]);
+
+		label=getfieldvalue(options,'label','');
+		if strcmpi(label,''),
+			#create generic label: 
+			label=['data' num2str(i)];
+		results(i).label=label;
+
+		shortlabel=getfieldvalue(options,'shortlabel','');
+		if strcmpi(shortlabel,''),
+			#create generic short label: 
+			shortlabel=['data' num2str(i)];
+		results(i).shortlabel=shortlabel;
+		
+		if size(data,2)>1,
+			time_range=getfieldvalue(options,'time_range',[0 100]);
+			results(i).time_range=time_range;
+
+		unit=getfieldvalue(options,'unit','');
+		if strcmpi(unit,''),
+			#create generic unit: 
+			unit='SI';
+		results(i).unit=unit;
+	model.results=results;
+	
+	#Write model to javascript database file: 
+	writejsfile([directory databasename '.js'],model,databasename);
+#}}}
Index: /issm/trunk-jpl/src/m/plot/writejsfield.py
===================================================================
--- /issm/trunk-jpl/src/m/plot/writejsfield.py	(revision 19035)
+++ /issm/trunk-jpl/src/m/plot/writejsfield.py	(revision 19035)
@@ -0,0 +1,24 @@
+def writejsfield(fid,name,variable,nods)
+#WRITEJSFIELD - write variable to javascript file 
+#
+#   Usage:
+#      writejsfield(fid,name,variable)
+#
+	#write array:
+	if len(variable[2])==1:
+		fid.write('<!-- {0}{{{-->\n'.format(name));
+		fid.write('{0}=['.format(name));
+		for i in xrange(1, nods-1):
+			fid.write('{0},',variable[i]);
+		fid.write('{0}];\n',variable[-1]);
+		fid.write('<!--}}}-->\n');
+	else:
+		#multi-sized array: 
+		fid.write('<!-- {0}{{{-->\n'.format(name));
+		fid.write('{0}=[]\n'.format(name));
+		for i in xrange(1, len(variable[2])):
+			fid.write('{0}["{1}"]=['.format(name,i));
+			for j in xrange(1, nods-1):
+				fid.write('{0},'.format(variable[j,i]));
+			fid.write('{0}];\n'.format(variable[-1,i]));
+		fid.write('<!--}}}-->\n');
Index: /issm/trunk-jpl/src/m/plot/writejsfile.py
===================================================================
--- /issm/trunk-jpl/src/m/plot/writejsfile.py	(revision 19035)
+++ /issm/trunk-jpl/src/m/plot/writejsfile.py	(revision 19035)
@@ -0,0 +1,57 @@
+def writejsfile(filename,model,keyname)
+#WRITEJSFILE - write model file to javascript database
+#
+#   Usage:
+#      writejsfile(filename,model,keyname)
+#
+
+	nods=length(model.x);
+	nel=size(model.index,1);
+	nx=length(model.contourx1);
+	
+	fid=open(filename,'w');
+
+	fid.write('model = {};\n');
+	fid.write('model["title"]="{0}";\n'.format(model.title);
+	fid.write('model["initialZoomFactor"]={0};\n'.format(model.initialZoomFactor);
+	
+	#write index:
+	fid.write('<!-- model["index"]{{{-->\n');
+	fid.write('model["index"]=[');
+	for i=1:nel-1,
+		fid.write('[{0}, {1}, {2}],'.format(model.index(i,1),model.index(i,2),model.index(i,3));
+	end
+	fid.write('[{0}, {1}, {2}]];\n'.format(model.index(end,1),model.index(end,2),model.index(end,3));
+	fid.write('<!--}}}-->\n');
+	
+	writejsfield(fid,'model["x"]',model.x,nods);
+	writejsfield(fid,'model["y"]',model.y,nods);
+	writejsfield(fid,'model["z"]',model.z,nods);
+	writejsfield(fid,'model["surface"]',model.surface,nods);
+	writejsfield(fid,'model["contourx1"]',model.contourx1,nx);
+	writejsfield(fid,'model["contoury1"]',model.contoury1,nx);
+	writejsfield(fid,'model["contourz1"]',model.contourz1,nx);
+	writejsfield(fid,'model["contourx2"]',model.contourx2,nx);
+	writejsfield(fid,'model["contoury2"]',model.contoury2,nx);
+	writejsfield(fid,'model["contourz2"]',model.contourz2,nx);
+
+
+	results=model.results;
+	fid.write('results={};\n');
+
+	for i=1:length(results):
+		fid.write('result={};\n');
+		writejsfield(fid,'result["data"]',results(i).data,nods);
+		fid.write('<!--{{{-->\n');
+		fid.write('result["caxis"]=[{0},{1}];\n'.format(results(i).caxis(1),results(i).caxis(2));
+		fid.write('result["label"]="{0}";\n'.format(results(i).label);
+		fid.write('result["shortlabel"]="{0}";\n'.format(results(i).shortlabel);
+		fid.write('result["unit"]="{0}";\n'.format(results(i).unit);
+		if size(results(i).data,2)>1:
+			fid.write('result["time_range"]=[{0},{1}];\n'.format(results(i).time_range(1),results(i).time_range(2));
+		fid.write('results["{0}"]=result;\n'.format(i);
+		fid.write('<!--}}}-->\n');
+	fid.write('model.results=results;\n');
+	fid.write('models["{0}"]=model;\n'.format(keyname);
+
+	fid.close();
