Index: /issm/trunk/src/m/classes/public/plot/plot_quiver.m
===================================================================
--- /issm/trunk/src/m/classes/public/plot/plot_quiver.m	(revision 2753)
+++ /issm/trunk/src/m/classes/public/plot/plot_quiver.m	(revision 2754)
@@ -10,95 +10,17 @@
 %      plot_quiver(md.x,md.y,md.vx,md.vy,options);
 
-%keep only non NaN elements
-pos=find(~isnan(x) & ~isnan(y) & ~isnan(u) & ~isnan(v));
-x=x(pos); y=y(pos);
-u=u(pos); v=v(pos);
-
-%get norm Min and Max
-Norm=sqrt(u.^2+v.^2);
-Min=min(Norm);
-Max=max(Norm);
-
-%process options: scaling factor?
-scalingfactor=getfieldvalue(options,'scaling',0.40);
-
-%number of colors?
-colorlevels=getfieldvalue(options,'colorlevels',30);
-if isnumeric(colorlevels),
-	if isnan(colorlevels),
-		numcolors=30;
-	else
-		numcolors=colorlevels;
-	end
-	levels=round_ice(linspace(Min,Max,numcolors+1),2);
-else
-	levels=zeros(1,length(colorlevels)+2);
-	levels(1)=Min;
-	for i=1:length(colorlevels)
-		levels(i+1)=colorlevels{i};
-	end
-	levels(end)=Max;
-	levels=sort(unique(levels));
-	numcolors=length(levels)-1;
-end
-
-%set the colormap 
-if numcolors==2;
-	%blue and red
-	c=colormap([0 0 1;1 0 0]);
-elseif numcolors==3,
-	%blue yellow and red
-	c=colormap([0 0 1;1 1 0;1 0 0]);
-else
-	%let jet choose
-	c=colormap(jet(numcolors));
-end
-
-%Scale data
-if strcmpi(getfieldvalue(options,'autoscale','on'),'off'),
-	delta=((min(x)-max(x))^2+(min(y)-max(y))^2)/numel(x);
-	u=scalingfactor*sqrt(delta)*u./Norm;
-	v=scalingfactor*sqrt(delta)*v./Norm;
-else
-	delta=((min(x)-max(x))^2+(min(y)-max(y))^2)/numel(x);
-	u=scalingfactor*sqrt(delta)*u./max(Norm);
-	v=scalingfactor*sqrt(delta)*v./max(Norm);
-end
+%process fields
+[quivers,palette]=quiver_process(x,y,u,v,options);
 
 %loop over the number of colors
 hold on
 h=[];
-for i=1:numcolors
-	pos=find( (Norm>=levels(i)) & (Norm<=levels(i+1)) );
-	hprime=quiver(x(pos),y(pos),u(pos),v(pos),'Color',c(i,:),'ShowArrowHead','on','AutoScale','off');
+for i=1:quivers.numcolors
+	pos=find(quivers.colorind==i);
+	hprime=quiver(quivers.x(pos),quivers.y(pos),quivers.u(pos),quivers.v(pos),...
+		'Color',palette(i,:),'ShowArrowHead','on','AutoScale','off');
 	h=[h;hprime];
 end
 
 %take care of colorbar
-if  strcmpi(getfieldvalue(options,'colorbar','on'),'on'),
-
-	%build ticks
-	hcb=colorbar('peer',gca,'location','EastOutside');
-	ticklabel=cell(1,length(levels));
-	for i=1:length(levels),
-		ticklabel{i}=num2str(round_ice(levels(i),3));
-	end
-	tickpos=1:numcolors+1;
-
-	%remove ticks if to many have been created
-	proportion=round(length(levels)/10);
-	if proportion>1,
-		ticklabel=ticklabel(1:proportion:end);
-		tickpos=tickpos(1:proportion:end);
-	end
-
-	%draw colorbar
-	set(hcb,'YTickLabel',ticklabel,'YTick',tickpos);
-	%position
-	if exist(options,'colorbarpos'),
-		set(hcb,'Position',getfieldvalue(options,'colorbarpos'));
-	end
-	%fontsize
-	fontsize=getfieldvalue(options,'fontsize',14);
-	set(hcb,'FontSize',fontsize);
-end
+quiver_colorbar(quivers,options);
Index: /issm/trunk/src/m/classes/public/plot/plot_riftrelvel.m
===================================================================
--- /issm/trunk/src/m/classes/public/plot/plot_riftrelvel.m	(revision 2753)
+++ /issm/trunk/src/m/classes/public/plot/plot_riftrelvel.m	(revision 2754)
@@ -7,7 +7,28 @@
 %   See also: PLOTMODEL
 
+%some checks
+if (length(md.vx)~=md.numberofgrids | length(md.vy)~=md.numberofgrids),
+	error('plot_riftvel error message: vx and vy do not have the right size'),
+end
+if ~isstruct(md.rifts),
+	error('plot error message: no rifts available!');
+end
+options=addfielddefault(options,'scaling',2);
+
+%set as NaN all velocities not on rifts
+for i=1:size(md.rifts,1),
+	penaltypairs=md.rifts(i).penaltypairs(:,[1 2]);
+	u=NaN*ones(md.numberofgrids,1);
+	v=NaN*ones(md.numberofgrids,1);
+	u(md.rifts(i).penaltypairs(:,1))=md.vx(penaltypairs(:,1))-md.vx(penaltypairs(:,2));
+	v(md.rifts(i).penaltypairs(:,1))=md.vy(penaltypairs(:,1))-md.vy(penaltypairs(:,2));
+end
+
 %process data and model
 [x y z elements is2d]=processmesh(md,options);
+[vel isongrid isquiver]=processdata(md,[u v],options);
+[quivers,palette]=quiver_process(x,y,vel(:,1),vel(:,2),options);
 
+%prepare plot
 subplot(width,width,i); 
 hold on
@@ -22,60 +43,67 @@
 isp2=0;
 
-if isstruct(md.rifts),
-	%plot mesh boundaries
-	for i=1:size(md.segments,1),
-		h1=plot(x(md.segments(i,1:2)),y(md.segments(i,1:2)),'b-');
+%plot mesh boundaries
+for i=1:size(md.segments,1),
+	h1=plot(x(md.segments(i,1:2)),y(md.segments(i,1:2)),'b-');
+end
+
+for i=1:size(md.rifts,1),
+	%get grids on rift
+	penaltypairs=md.rifts(i).penaltypairs;
+
+	segments=md.rifts(i).segments;
+	for j=1:size(segments,1),
+		plot(x(segments(j,1:2)),y(segments(j,1:2)),'b-');
 	end
-	for i=1:size(md.rifts,1),
-		penaltypairs=md.rifts(i).penaltypairs;
 
-		segments=md.rifts(i).segments;
-		for j=1:size(segments,1),
-			plot(x(segments(j,1:2)),y(segments(j,1:2)),'b-');
+	normal=zeros(2,1);
+	for j=1:size(penaltypairs,1),
+		normal(1)=penaltypairs(j,5);
+		normal(2)=penaltypairs(j,6);
+
+		vx1=md.vx(penaltypairs(j,1)); vx2=md.vx(penaltypairs(j,2)); vy1=md.vy(penaltypairs(j,1)); vy2=md.vy(penaltypairs(j,2));
+		penetration=(vx2-vx1)*normal(1)+(vy2-vy1)*normal(2);
+		%if penetration is negative, plot in black, positive, plot in red;: ie: if rift is closing, black, if rift is opening, red.
+		if(penetration>0),
+			p2=plot(x(penaltypairs(j,1)) ,y(penaltypairs(j,1)),'r*');
+			isp2=1;
+		else
+			p1=plot(x(penaltypairs(j,1)) ,y(penaltypairs(j,1)),'k*');
+			isp1=1;
 		end
+	end
 
-		normal=zeros(2,1);
-		for j=1:size(penaltypairs,1),
-			normal(1)=penaltypairs(j,5);
-			normal(2)=penaltypairs(j,6);
+	%point out the tips
+	h2=plot(x(md.rifts(i).tips(1)),y(md.rifts(i).tips(1)),'g*');
+	plot(x(md.rifts(i).tips(2)),y(md.rifts(i).tips(2)),'g*');
+	segments=md.rifts(i).segments(:,1:2);
+end
 
-			vx1=md.vx(penaltypairs(j,1)); vx2=md.vx(penaltypairs(j,2)); vy1=md.vy(penaltypairs(j,1)); vy2=md.vy(penaltypairs(j,2));
-			penetration=(vx2-vx1)*normal(1)+(vy2-vy1)*normal(2);
-			%if penetration is negative, plot in black, positive, plot in red;: ie: if rift is closing, black, if rift is opening, red.
-			if(penetration>0),
-				p2=plot(x(penaltypairs(j,1)) ,y(penaltypairs(j,1)),'r*');
-				isp2=1;
-			else
-				p1=plot(x(penaltypairs(j,1)) ,y(penaltypairs(j,1)),'k*');
-				isp1=1;
-			end
-		end
+%plot rifts vel
+h3=[];
+for i=1:quivers.numcolors
+	pos=find(quivers.colorind==i);
+	hprime=quiver(quivers.x(pos),quivers.y(pos),quivers.u(pos),quivers.v(pos),...
+		'Color',palette(i,:),'ShowArrowHead','on','AutoScale','off');
+	hprime=quiver(quivers.x(pos),quivers.y(pos),-quivers.u(pos),-quivers.v(pos),...
+		'Color',palette(i,:),'ShowArrowHead','on','AutoScale','off');
+	h3=[h3;hprime];
+end
 
-		%point out the tips
-		h2=plot(x(md.rifts(i).tips(1)),y(md.rifts(i).tips(1)),'g*');
-		plot(x(md.rifts(i).tips(2)),y(md.rifts(i).tips(2)),'g*');
-
-		%plot relative velocities
-		h=quiver(x(penaltypairs(:,1)),y(penaltypairs(:,1)),md.vx(penaltypairs(:,2))-md.vx(penaltypairs(:,1)),md.vy(penaltypairs(:,2))-md.vy(penaltypairs(:,1)),3);
-		%frequency=1:5:size(penaltypairs,1);
-		%h=quiver(x(penaltypairs(frequency,1)),y(penaltypairs(frequency,1)),md.vx(penaltypairs(frequency,2))-md.vx(penaltypairs(frequency,1)),md.vy(penaltypairs(frequency,2))-md.vy(penaltypairs(frequency,1)),2);
-		set(h,'Color',[0 1 0]);
-	end
-	if isp1 & isp2
-		legend([h1,h2,p1,p2,h],'mesh boundaries','rift tips',' rifts closing','rifts opening','relative velocities')
-	elseif isp1
-		legend([h1,h2,p1,h],'mesh boundaries','rift tips',' rifts closing','relative velocities')
-	elseif isp2
-		legend([h1,h2,p2,h],'mesh boundaries','rift tips','rifts opening','relative velocities')
-	else
-		legend([h1,h2,h],'mesh boundaries','rift tips','relative velocities')
-	end
+%legend
+if isp1 & isp2
+	legend([h1,h2,p1,p2],'mesh boundaries','rift tips',' rifts closing','rifts opening')
+elseif isp1
+	legend([h1,h2,p1],'mesh boundaries','rift tips',' rifts closing')
+elseif isp2
+	legend([h1,h2,p2],'mesh boundaries','rift tips','rifts opening')
 else
-	error('plot error message: no rifts available!');
+	legend([h1,h2],'mesh boundaries','rift tips')
 end
 hold off
 
 %apply options
-options=addfielddefault(options,'title','Rift relative velocities');
-options=addfielddefault(options,'colorbar',0);
+quiver_colorbar(quivers,options);
+options=changefieldvalue(options,'colorbar',2);
+options=addfielddefault(options,'title','Rift Velocities');
 applyoptions(md,[],options);
Index: /issm/trunk/src/m/classes/public/plot/plot_riftvel.m
===================================================================
--- /issm/trunk/src/m/classes/public/plot/plot_riftvel.m	(revision 2753)
+++ /issm/trunk/src/m/classes/public/plot/plot_riftvel.m	(revision 2754)
@@ -7,7 +7,28 @@
 %   See also: PLOTMODEL
 
+%some checks
+if (length(md.vx)~=md.numberofgrids | length(md.vy)~=md.numberofgrids),
+	error('plot_riftvel error message: vx and vy do not have the right size'),
+end
+if ~isstruct(md.rifts),
+	error('plot error message: no rifts available!');
+end
+options=addfielddefault(options,'scaling',2);
+
+%set as NaN all velocities not on rifts
+for i=1:size(md.rifts,1),
+	penaltypairs=md.rifts(i).penaltypairs(:,[1 2]);
+	u=NaN*ones(md.numberofgrids,1);
+	v=NaN*ones(md.numberofgrids,1);
+	u(penaltypairs(:))=md.vx(penaltypairs(:));
+	v(penaltypairs(:))=md.vy(penaltypairs(:));
+end
+
 %process data and model
 [x y z elements is2d]=processmesh(md,options);
+[vel isongrid isquiver]=processdata(md,[u v],options);
+[quivers,palette]=quiver_process(x,y,vel(:,1),vel(:,2),options);
 
+%prepare plot
 subplot(width,width,i); 
 hold on
@@ -22,57 +43,65 @@
 isp2=0;
 
-if isstruct(md.rifts),
-	%plot mesh boundaries
-	for i=1:size(md.segments,1),
-		h1=plot(x(md.segments(i,1:2)),y(md.segments(i,1:2)),'b-');
+%plot mesh boundaries
+for i=1:size(md.segments,1),
+	h1=plot(x(md.segments(i,1:2)),y(md.segments(i,1:2)),'b-');
+end
+
+for i=1:size(md.rifts,1),
+	%get grids on rift
+	penaltypairs=md.rifts(i).penaltypairs;
+
+	segments=md.rifts(i).segments;
+	for j=1:size(segments,1),
+		plot(x(segments(j,1:2)),y(segments(j,1:2)),'b-');
 	end
-	for i=1:size(md.rifts,1),
-		penaltypairs=md.rifts(i).penaltypairs;
 
-		segments=md.rifts(i).segments;
-		for j=1:size(segments,1),
-			plot(x(segments(j,1:2)),y(segments(j,1:2)),'b-');
+	normal=zeros(2,1);
+	for j=1:size(penaltypairs,1),
+		normal(1)=penaltypairs(j,5);
+		normal(2)=penaltypairs(j,6);
+
+		vx1=md.vx(penaltypairs(j,1)); vx2=md.vx(penaltypairs(j,2)); vy1=md.vy(penaltypairs(j,1)); vy2=md.vy(penaltypairs(j,2));
+		penetration=(vx2-vx1)*normal(1)+(vy2-vy1)*normal(2);
+		%if penetration is negative, plot in black, positive, plot in red;: ie: if rift is closing, black, if rift is opening, red.
+		if(penetration>0),
+			p2=plot(x(penaltypairs(j,1)) ,y(penaltypairs(j,1)),'r*');
+			isp2=1;
+		else
+			p1=plot(x(penaltypairs(j,1)) ,y(penaltypairs(j,1)),'k*');
+			isp1=1;
 		end
+	end
 
-		normal=zeros(2,1);
-		for j=1:size(penaltypairs,1),
-			normal(1)=penaltypairs(j,5);
-			normal(2)=penaltypairs(j,6);
+	%point out the tips
+	h2=plot(x(md.rifts(i).tips(1)),y(md.rifts(i).tips(1)),'g*');
+	plot(x(md.rifts(i).tips(2)),y(md.rifts(i).tips(2)),'g*');
+	segments=md.rifts(i).segments(:,1:2);
+end
 
-			vx1=md.vx(penaltypairs(j,1)); vx2=md.vx(penaltypairs(j,2)); vy1=md.vy(penaltypairs(j,1)); vy2=md.vy(penaltypairs(j,2));
-			penetration=(vx2-vx1)*normal(1)+(vy2-vy1)*normal(2);
-			%if penetration is negative, plot in black, positive, plot in red;: ie: if rift is closing, black, if rift is opening, red.
-			if(penetration>0),
-				p2=plot(x(penaltypairs(j,1)) ,y(penaltypairs(j,1)),'r*');
-				isp2=1;
-			else
-				p1=plot(x(penaltypairs(j,1)) ,y(penaltypairs(j,1)),'k*');
-				isp1=1;
-			end
-		end
+%plot rifts vel
+h3=[];
+for i=1:quivers.numcolors
+	pos=find(quivers.colorind==i);
+	hprime=quiver(quivers.x(pos),quivers.y(pos),quivers.u(pos),quivers.v(pos),...
+		'Color',palette(i,:),'ShowArrowHead','on','AutoScale','off');
+	h3=[h3;hprime];
+end
 
-		%point out the tips
-		h2=plot(x(md.rifts(i).tips(1)),y(md.rifts(i).tips(1)),'g*');
-		plot(x(md.rifts(i).tips(2)),y(md.rifts(i).tips(2)),'g*');
-		segments=md.rifts(i).segments(:,1:2);
-		h3=quiver(x(segments),y(segments),md.vx(segments),md.vy(segments));
-		set(h3,'Color',[1 0 0]);
-	end
-	if isp1 & isp2
-		legend([h1,h2,p1,p2,h3],'mesh boundaries','rift tips',' rifts closing','rifts opening','velocities')
-	elseif isp1
-		legend([h1,h2,p1,h3],'mesh boundaries','rift tips',' rifts closing','velocities')
-	elseif isp2
-		legend([h1,h2,p2,h3],'mesh boundaries','rift tips','rifts opening','velocities')
-	else
-		legend([h1,h2,h3],'mesh boundaries','rift tips','velocities')
-	end
+%legend
+if isp1 & isp2
+	legend([h1,h2,p1,p2],'mesh boundaries','rift tips',' rifts closing','rifts opening')
+elseif isp1
+	legend([h1,h2,p1],'mesh boundaries','rift tips',' rifts closing')
+elseif isp2
+	legend([h1,h2,p2],'mesh boundaries','rift tips','rifts opening')
 else
-	error('plot error message: no rifts available!');
+	legend([h1,h2],'mesh boundaries','rift tips')
 end
 hold off
 
 %apply options
+quiver_colorbar(quivers,options);
+options=changefieldvalue(options,'colorbar',2);
 options=addfielddefault(options,'title','Rift Velocities');
-options=addfielddefault(options,'colorbar',0);
 applyoptions(md,[],options);
