Index: /issm/branches/trunk-jpl-ad2/src/m/plot/plot_gl.m
===================================================================
--- /issm/branches/trunk-jpl-ad2/src/m/plot/plot_gl.m	(revision 18322)
+++ /issm/branches/trunk-jpl-ad2/src/m/plot/plot_gl.m	(revision 18323)
@@ -21,4 +21,7 @@
 copyfile([scriptsdir '/generic/editables.js'],'./generic/editables.js');
 
+%scaling factor: 
+scaling_factor=getfieldvalue(options,'scaling_factor',50);
+
 %Deal with title: 
 if exist(options,'title')
@@ -34,4 +37,5 @@
 %size of frame: 
 replacestringinfile('./css/mystyle.css','height: 55%; /*editable*/',['height: ' num2str(getfieldvalue(options,'frame_height',55)) '%; /*editable*/']);
+
 
 %high resolution: 
@@ -50,4 +54,17 @@
 	fid=fopen([database 'model_coords.js'],'w');
 
+	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);
+	
+
 	%write index:
 	fprintf(fid,'<!-- index{{{-->\n');
@@ -58,7 +75,8 @@
 	fprintf(fid,'[%i, %i, %i]];\n',md.mesh.elements(end,1),md.mesh.elements(end,2),md.mesh.elements(end,3));
 	fprintf(fid,'<!--}}}-->\n');
-	writejsfield(fid,'x',md.mesh.x,md.mesh.numberofvertices);
-	writejsfield(fid,'y',md.mesh.y,md.mesh.numberofvertices);
-	writejsfield(fid,'surface',md.geometry.surface,md.mesh.numberofvertices);
+	writejsfield(fid,'x',x,numberofvertices);
+	writejsfield(fid,'y',y,numberofvertices);
+	writejsfield(fid,'z',z,numberofvertices);
+	writejsfield(fid,'surface',surface,numberofvertices);
 
 	%Deal with data: 
@@ -101,6 +119,6 @@
 	replacestringinfile('./generic/editables.js','"V"',labelstring);
 	replacestringinfile('./generic/editables.js','"velocity"',datastring);
-	replacestringinfile('./generic/editables.js','var data_min_array = [-9999',['var data_min_array = [' caxis1string]);
-	replacestringinfile('./generic/editables.js','var data_max_array = [9999',['var data_max_array = [' caxis2string]);
+	replacestringinfile('./generic/editables.js','var data_min_array = [0',['var data_min_array = [' caxis1string]);
+	replacestringinfile('./generic/editables.js','var data_max_array = [3500',['var data_max_array = [' caxis2string]);
 	replacestringinfile('./generic/editables.js','"m/yr"',unitstring);
 	replacestringinfile('./generic/editables.js','initialZoomFactor = -.20;',['initialZoomFactor = ' num2str(zoom) ';']);
Index: /issm/branches/trunk-jpl-ad2/src/m/plot/prepare_gl.m
===================================================================
--- /issm/branches/trunk-jpl-ad2/src/m/plot/prepare_gl.m	(revision 18322)
+++ /issm/branches/trunk-jpl-ad2/src/m/plot/prepare_gl.m	(revision 18323)
@@ -1,12 +1,25 @@
 function prepare_gl(md,options)
+
+scaling_factor=getfieldvalue(options,'scaling_factor',50);
 
 %scripts to be picked up from directory:
 scriptsdir=['~/issm-projects/visl/externalicelab/fem'];
+
+%some checks: 
+if isempty(md.mesh.lat) | isnan(md.mesh.lat) | isempty(md.mesh.long) | isnan(md.mesh.long),
+	error('prepare_gl error message: need lat and long in md.mesh to be filled up!');
+end
+
+%database: {{{
 if strcmpi(md.mesh.hemisphere','s'),
-	triangulation='/Users/larour/ModelData/BamberDEMAntarctica1km/triangulated/triangulation_2.mat';
-	radar_image='/Users/larour/ModelData/BamberDEMAntarctica1km/triangulated/radar.png';
-	triangulation_hd='/Users/larour/ModelData/BamberDEMAntarctica1km/triangulated/triangulation_2.mat';
-	geotiff_name_hd=['/u/astrid-r1b/ModelData/MosaicTiffRsat/amm125m_v2_200m.tif'];
+	geotiff_name_earth=['/u/astrid-r1b/ModelData/MosaicTiffRsat/amm125m_v2_200m.wgs84.tif'];
+	radar_image_earth='/Users/larour/ModelData/TrueMarble_GeoTIFF/radar_no_antarctica.png';
+	triangulation_earth='/Users/larour/ModelData/DEM_geotiff/processed/triangulation.mat';
+	triangulation='/Users/larour/ModelData/BamberDEMAntarctica1km/triangulated/triangulation_15.mat';
+	radar_image='/Users/larour/ModelData/BamberDEMAntarctica1km/triangulated/radar.latlong.png';
+
 elseif strcmpi(md.mesh.hemisphere','n'),
+	geotiff_name_earth=['/u/astrid-r1b/ModelData/MosaicTiffRsat/amm125m_v2_200m.wgs84.tif'];
+	radar_image_earth='/Users/larour/ModelData/TrueMarble_GeoTIFF/radar_no_greenland.png';
 	triangulation='/u/astrid-r1b/ModelData/HowatDEMGreenland2012/triangulated/triangulation_15.mat';
 	radar_image='/u/astrid-r1b/ModelData/HowatDEMGreenland2012/triangulated/radar.png';
@@ -15,4 +28,5 @@
 	error('prepare_gl error usage: ''hemisphere'' should be set to ''s'' or ''n''');
 end
+%}}}
 
 %keep present directory: 
@@ -34,21 +48,38 @@
 copyfile([scriptsdir '/generic.html'],'.');
 
-
 database=['./generic/'];
 
-%Write triangulation to disk {{{
-tr=load(triangulation);
+%handle rendering of the whole planet: {{{
+tr=load(triangulation_earth);
+index=tr.index; lat=tr.lat; long=tr.long; surface=tr.surface;
+
+%we get index, lat long and surface, make this into a planet sphere: 
+
+R=6371000*ones(length(surface),1)+scaling_factor*surface;
+
+x = R .* cosd(lat) .* cosd(long);
+y = R .* cosd(lat) .* sind(long);
+z = R .* sind(lat);
+
 
 %write x0, x1, y0 and y1
 fid=fopen([database '/image_coords.js'],'w');
-fprintf(fid,'var x0=%g;\n',tr.x0);
-fprintf(fid,'var x1=%g;\n',tr.x1);
-fprintf(fid,'var y0=%g;\n',tr.y0);
-fprintf(fid,'var y1=%g;\n',tr.y1);
-fclose(fid);
-
-%copy image locally: 
-system(['cp ' radar_image ' ' database '/radar.png']);
-	
+fprintf(fid,'var x0=%g;\n',min(x));
+fprintf(fid,'var x1=%g;\n',max(x));
+fprintf(fid,'var y0=%g;\n',min(y));
+fprintf(fid,'var y1=%g;\n',max(y));
+fprintf(fid,'var z0=%g;\n',min(z));
+fprintf(fid,'var z1=%g;\n',max(z));
+fprintf(fid,'var lat0=%g;\n',min(lat));
+fprintf(fid,'var lat1=%g;\n',max(lat));
+fprintf(fid,'var long0=%g;\n',min(long));
+fprintf(fid,'var long1=%g;\n',max(long));
+fclose(fid);
+
+system(['cp ' radar_image_earth ' ' database '/radar.png']);
+
+numberofvertices=length(x);
+numberofelements=length(index);
+
 %write triangulation and surface to disk: 
 fid=fopen([database '/surface_triangulation.js'],'w');
@@ -57,16 +88,17 @@
 fprintf(fid,'<!-- index_surface{{{-->\n');
 fprintf(fid,'var index_surface=[');
-for i=1:length(tr.index)-1,
-	fprintf(fid,'[%i, %i, %i],',tr.index(i,1),tr.index(i,2),tr.index(i,3));
-end
-fprintf(fid,'[%i, %i, %i]];\n',tr.index(end,1),tr.index(end,2),tr.index(end,3));
-fprintf(fid,'<!--}}}-->\n');
+for i=1:numberofelements-1,
+	fprintf(fid,'[%i, %i, %i],',index(i,1),index(i,2),index(i,3));
+end
+fprintf(fid,'[%i, %i, %i]];\n',index(end,1),index(end,2),index(end,3));
+fprintf(fid,'<!--}}}-->\n');
+
 %write x:
 fprintf(fid,'<!-- x_surface{{{-->\n');
 fprintf(fid,'var x_surface=[');
-for i=1:length(tr.x)-1,
-	fprintf(fid,'%g,',tr.x(i,1));
-end
-fprintf(fid,'%g];\n',tr.x(end,1));
+for i=1:numberofvertices-1,
+	fprintf(fid,'%g,',x(i,1));
+end
+fprintf(fid,'%g];\n',x(end,1));
 fprintf(fid,'<!--}}}-->\n');
 
@@ -74,185 +106,185 @@
 fprintf(fid,'<!-- y_surface{{{-->\n');
 fprintf(fid,'var y_surface=[');
-for i=1:length(tr.y)-1,
-	fprintf(fid,'%g,',tr.y(i,1));
-end
-fprintf(fid,'%g];\n',tr.y(end,1));
-fprintf(fid,'<!--}}}-->\n');
-
-%write surface:
-fprintf(fid,'<!-- surface_surface{{{-->\n');
-fprintf(fid,'var surface_surface=[');
-for i=1:length(tr.surface)-1,
-	fprintf(fid,'%g,',tr.surface(i));
-end
-fprintf(fid,'%g];\n',tr.surface(end));
-fprintf(fid,'<!--}}}-->\n');
-
-fclose(fid);
-%}}}
-%Write high-res triangulation to disk  {{{
-if getfieldvalue(options,'highres',0);
-	
-	x0=min(md.mesh.x);
-	x1=max(md.mesh.x);
-	y0=min(md.mesh.y);
-	y1=max(md.mesh.y);
-	dx=x1-x0;
-	dy=y1-y0;
-	factor=.25;
-
-	x0=x0-factor*dx;
-	x1=x1+factor*dx;
-	y1=y1+factor*dy;
-	y0=y0-factor*dy;
-
-	%write x0, x1, y0 and y1
-	fid=fopen([database '/image_coords_highdef.js'],'w');
-	fprintf(fid,'var x0_hd=%g;\n',x0);
-	fprintf(fid,'var x1_hd=%g;\n',x1);
-	fprintf(fid,'var y0_hd=%g;\n',y0);
-	fprintf(fid,'var y1_hd=%g;\n',y1);
-	fclose(fid);
-
-
-	%extract image
-	eval(['!gdal_translate -quiet -projwin ' num2str(x0) ' ' num2str(y1) ' ' num2str(x1) ' ' num2str(y0) ' ' geotiff_name_hd ' radar_hd.tif']);
-
-	%convert to png: 
-	system('convert radar_hd.tif radar_hd.png  && rm -rf radar_hd.tif');
-
-	%get width: 
-	[status,width]=system(['convert radar_hd.png -format %w info:']); width=str2num(width);
-
-	%get height: 
-	[status,height]=system(['convert radar_hd.png -format %h info:']); height=str2num(height);
-
-	%get these a power of 2: 
-	width=2^(nextpow2(width));
-	height=2^(nextpow2(height));
-
-	%change size of image: 
-	system(['convert -geometry ' num2str(width) 'x' num2str(height) '! radar_hd.png radar_hd.png']);
-
-	system(['mv radar_hd.png ' database '/radar_hd.png']);
-
-	%now, extract higher resolution triangulation:
-	trhd=load(triangulation_hd); a=trhd;
-	trhd.xelem=trhd.x(trhd.index)*[1;1;1]/3;
-	trhd.yelem=trhd.y(trhd.index)*[1;1;1]/3;
-	
-	pos_elem=find(x0<=trhd.xelem & trhd.xelem<=x1 & y0<=trhd.yelem & trhd.yelem<=y1);
-	pos_node=sort(unique(trhd.index(pos_elem,:)));
-
-	%keep track of some fields
-	numberofvertices1=length(trhd.x);
-	numberofelements1=length(trhd.index);
-	numberofvertices2=length(pos_node);
-	numberofelements2=length(pos_elem);
-	flag_node=zeros(numberofvertices1,1);
-	flag_node(pos_node)=1;
-
-	%Create Pelem and Pnode (transform old nodes in new nodes and same thing for the elements)
-	Pelem=zeros(numberofelements1,1);
-	Pelem(pos_elem)=[1:numberofelements2]';
-	Pnode=zeros(numberofvertices1,1);
-	Pnode(pos_node)=[1:numberofvertices2]';
-
-	%renumber the elements (some nodes won't exist anymore)
-	index2=trhd.index(pos_elem,:);
-	index2(:,1)=Pnode(index2(:,1));
-	index2(:,2)=Pnode(index2(:,2));
-	index2(:,3)=Pnode(index2(:,3));
-
-	trhd.index=index2;
-	trhd.x=trhd.x(pos_node);
-	trhd.y=trhd.y(pos_node);
-	trhd.surface=trhd.surface(pos_node);
-
-	%write triangulation and surface to disk: 
-	fid=fopen([database '/surface_triangulation_hd.js'],'w');
-
-	%write index:
-	fprintf(fid,'<!-- index_surface_hd{{{-->\n');
-	fprintf(fid,'var index_surface_hd=[');
-	for i=1:length(trhd.index)-1,
-		fprintf(fid,'[%i, %i, %i],',trhd.index(i,1),trhd.index(i,2),trhd.index(i,3));
-	end
-	fprintf(fid,'[%i, %i, %i]];\n',trhd.index(end,1),trhd.index(end,2),trhd.index(end,3));
-	fprintf(fid,'<!--}}}-->\n');
-	%write x:
-	fprintf(fid,'<!-- x_surface_hd{{{-->\n');
-	fprintf(fid,'var x_surface_hd=[');
-	for i=1:length(trhd.x)-1,
-		fprintf(fid,'%g,',trhd.x(i,1));
-	end
-	fprintf(fid,'%g];\n',trhd.x(end,1));
-	fprintf(fid,'<!--}}}-->\n');
-
-	%write y:
-	fprintf(fid,'<!-- y_surface_hd{{{-->\n');
-	fprintf(fid,'var y_surface_hd=[');
-	for i=1:length(trhd.y)-1,
-		fprintf(fid,'%g,',trhd.y(i,1));
-	end
-	fprintf(fid,'%g];\n',trhd.y(end,1));
-	fprintf(fid,'<!--}}}-->\n');
-
-	%write surface:
-	fprintf(fid,'<!-- surface_surface_hd{{{-->\n');
-	fprintf(fid,'var surface_surface_hd=[');
-	for i=1:length(trhd.surface)-1,
-		fprintf(fid,'%g,',trhd.surface(i));
-	end
-	fprintf(fid,'%g];\n',trhd.surface(end));
-	fprintf(fid,'<!--}}}-->\n');
-
-	fclose(fid);
-	a2=trhd;
-	save temp2 a2 a
-else
-	delete([database '/radar_hd.png']);
-	delete([database '/image_coords_highdef.js']);
-	delete([database '/surface_triangulation_hd.js']);
-	
-end
-% }}}
-%Deal with contour {{{
-	
-	fid=fopen([database '/contour_coords.js'],'w');
-
-	contour_x=md.mesh.x(md.mesh.segments(:,1));
-	contour_y=md.mesh.y(md.mesh.segments(:,1));
-	contour_surface=md.geometry.surface(md.mesh.segments(:,1));
-
-	%write contour_x:
-	fprintf(fid,'<!-- contour_x{{{-->\n');
-	fprintf(fid,'var contour_x=[');
-	for i=1:length(contour_x)-1,
-		fprintf(fid,'%g,',contour_x(i));
-	end
-	fprintf(fid,'%g];\n',contour_x(end));
-	fprintf(fid,'<!--}}}-->\n');
-
-	%write contour_y:
-	fprintf(fid,'<!-- contour_y{{{-->\n');
-	fprintf(fid,'var contour_y=[');
-	for i=1:length(contour_y)-1,
-		fprintf(fid,'%g,',contour_y(i));
-	end
-	fprintf(fid,'%g];\n',contour_y(end));
-	fprintf(fid,'<!--}}}-->\n');
-
-	%write contour_surface:
-	fprintf(fid,'<!-- contour_surface{{{-->\n');
-	fprintf(fid,'var contour_surface=[');
-	for i=1:length(contour_surface)-1,
-		fprintf(fid,'%g,',contour_surface(i));
-	end
-	fprintf(fid,'%g];\n',contour_surface(end));
-	fprintf(fid,'<!--}}}-->\n');
-
-	fclose(fid);
-% }}}
+for i=1:numberofvertices-1,
+	fprintf(fid,'%g,',y(i,1));
+end
+fprintf(fid,'%g];\n',y(end,1));
+fprintf(fid,'<!--}}}-->\n');
+
+%write z:
+fprintf(fid,'<!-- z_surface{{{-->\n');
+fprintf(fid,'var z_surface=[');
+for i=1:numberofvertices-1,
+	fprintf(fid,'%g,',z(i,1));
+end
+fprintf(fid,'%g];\n',z(end,1));
+fprintf(fid,'<!--}}}-->\n');
+
+%write lat:
+fprintf(fid,'<!-- lat_surface{{{-->\n');
+fprintf(fid,'var lat_surface=[');
+for i=1:numberofvertices-1,
+	fprintf(fid,'%g,',lat(i,1));
+end
+fprintf(fid,'%g];\n',lat(end,1));
+fprintf(fid,'<!--}}}-->\n');
+
+%write long:
+fprintf(fid,'<!-- long_surface{{{-->\n');
+fprintf(fid,'var long_surface=[');
+for i=1:numberofvertices-1,
+	fprintf(fid,'%g,',long(i,1));
+end
+fprintf(fid,'%g];\n',long(end,1));
+fprintf(fid,'<!--}}}-->\n');
+
+fclose(fid);
+%}}}
+%handle rendering of Antarctica and Greenland wholy{{{
+
+load(triangulation);
+
+R=6371000*ones(length(x),1)+scaling_factor*surface;
+
+[lat,long]=xy2ll(x,y,-1);
+
+x = R .* cosd(lat) .* cosd(long);
+y = R .* cosd(lat) .* sind(long);
+z = R .* sind(lat);
+
+x0=min(x); x1=max(x);
+y0=min(y); y1=max(y);
+z0=min(z); z1=max(z);
+lat0=min(lat); lat1=max(lat);long0=min(long);long1=max(long);
+
+
+%write x0, x1, y0 and y1
+fid=fopen([database '/image_coords_highdef.js'],'w');
+
+fprintf(fid,'var x0_hd=%g;\n',x0);
+fprintf(fid,'var x1_hd=%g;\n',x1);
+fprintf(fid,'var y0_hd=%g;\n',y0);
+fprintf(fid,'var y1_hd=%g;\n',y1);
+fprintf(fid,'var z0_hd=%g;\n',z0);
+fprintf(fid,'var z1_hd=%g;\n',z1);
+fprintf(fid,'var lat0_hd=%g;\n',lat0);
+fprintf(fid,'var lat1_hd=%g;\n',lat1);
+fprintf(fid,'var long0_hd=%g;\n',long0);
+fprintf(fid,'var long1_hd=%g;\n',long1);
+fclose(fid);
+
+
+%copy corresponding image: 
+system(['cp ' radar_image ' ' database '/radar_hd.png']);
+
+numberofvertices=length(x);
+numberofelements=length(index);
+
+%write triangulation and surface to disk: 
+fid=fopen([database '/surface_triangulation_hd.js'],'w');
+
+%write index:
+fprintf(fid,'<!-- index_surface_hd{{{-->\n');
+fprintf(fid,'var index_surface_hd=[');
+for i=1:numberofelements-1,
+	fprintf(fid,'[%i, %i, %i],',index(i,1),index(i,2),index(i,3));
+end
+fprintf(fid,'[%i, %i, %i]];\n',index(end,1),index(end,2),index(end,3));
+fprintf(fid,'<!--}}}-->\n');
+
+%write x:
+fprintf(fid,'<!-- x_surface_hd{{{-->\n');
+fprintf(fid,'var x_surface_hd=[');
+for i=1:numberofvertices-1,
+	fprintf(fid,'%g,',x(i,1));
+end
+fprintf(fid,'%g];\n',x(end,1));
+fprintf(fid,'<!--}}}-->\n');
+
+%write y:
+fprintf(fid,'<!-- y_surface_hd{{{-->\n');
+fprintf(fid,'var y_surface_hd=[');
+for i=1:numberofvertices-1,
+	fprintf(fid,'%g,',y(i,1));
+end
+fprintf(fid,'%g];\n',y(end,1));
+fprintf(fid,'<!--}}}-->\n');
+
+%write z:
+fprintf(fid,'<!-- z_surface_hd{{{-->\n');
+fprintf(fid,'var z_surface_hd=[');
+for i=1:numberofvertices-1,
+	fprintf(fid,'%g,',z(i,1));
+end
+fprintf(fid,'%g];\n',z(end,1));
+fprintf(fid,'<!--}}}-->\n');
+
+%write lat:
+fprintf(fid,'<!-- lat_surface_hd{{{-->\n');
+fprintf(fid,'var lat_surface_hd=[');
+for i=1:numberofvertices-1,
+	fprintf(fid,'%g,',lat(i,1));
+end
+fprintf(fid,'%g];\n',lat(end,1));
+fprintf(fid,'<!--}}}-->\n');
+
+%write long:
+fprintf(fid,'<!-- long_surface_hd{{{-->\n');
+fprintf(fid,'var long_surface_hd=[');
+for i=1:numberofvertices-1,
+	fprintf(fid,'%g,',long(i,1));
+end
+fprintf(fid,'%g];\n',long(end,1));
+fprintf(fid,'<!--}}}-->\n');
+
+fclose(fid);
+
+
+%}}}
+%handle rendering of contour {{{
+
+
+fid=fopen([database '/contour_coords.js'],'w');
+
+contour_lat=md.mesh.lat(md.mesh.segments(:,1));
+contour_long=md.mesh.long(md.mesh.segments(:,1));
+contour_surface=md.geometry.surface(md.mesh.segments(:,1));
+
+R=6371000*ones(length(contour_surface),1)+scaling_factor*contour_surface;
+
+contour_x = R .* cosd(contour_lat) .* cosd(contour_long);
+contour_y = R .* cosd(contour_lat) .* sind(contour_long);
+contour_z = R .* sind(contour_lat);
+
+%write contour_x:
+fprintf(fid,'<!-- contour_x{{{-->\n');
+fprintf(fid,'var contour_x=[');
+for i=1:length(contour_x)-1,
+	fprintf(fid,'%g,',contour_x(i));
+end
+fprintf(fid,'%g];\n',contour_x(end));
+fprintf(fid,'<!--}}}-->\n');
+
+%write contour_y:
+fprintf(fid,'<!-- contour_y{{{-->\n');
+fprintf(fid,'var contour_y=[');
+for i=1:length(contour_y)-1,
+	fprintf(fid,'%g,',contour_y(i));
+end
+fprintf(fid,'%g];\n',contour_y(end));
+fprintf(fid,'<!--}}}-->\n');
+
+%write contour_surface:
+fprintf(fid,'<!-- contour_z{{{-->\n');
+fprintf(fid,'var contour_z=[');
+for i=1:length(contour_z)-1,
+	fprintf(fid,'%g,',contour_z(i));
+end
+fprintf(fid,'%g];\n',contour_z(end));
+fprintf(fid,'<!--}}}-->\n');
+
+fclose(fid);
+
+%}}}
 
 %Come back to present directory: 
