Index: /issm/trunk/src/m/classes/public/mesh/meshyams.m
===================================================================
--- /issm/trunk/src/m/classes/public/mesh/meshyams.m	(revision 2573)
+++ /issm/trunk/src/m/classes/public/mesh/meshyams.m	(revision 2574)
@@ -110,9 +110,9 @@
 end
 if strcmpi(Names.interp,'grid'),
-		md.vx_obs=InterpFromGridToMesh(Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vxname),md.x,md.y,0);
-		md.vy_obs=InterpFromGridToMesh(Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vyname),md.x,md.y,0);
-	else
-		md.vx_obs=InterpFromMeshToMesh2d(Vel.(Names.indexname),Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vxname),md.x,md.y,0);
-		md.vy_obs=InterpFromMeshToMesh2d(Vel.(Names.indexname),Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vyname),md.x,md.y,0);
-	end
+	md.vx_obs=InterpFromGridToMesh(Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vxname),md.x,md.y,0);
+	md.vy_obs=InterpFromGridToMesh(Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vyname),md.x,md.y,0);
+else
+	md.vx_obs=InterpFromMeshToMesh2d(Vel.(Names.indexname),Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vxname),md.x,md.y,0);
+	md.vy_obs=InterpFromMeshToMesh2d(Vel.(Names.indexname),Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vyname),md.x,md.y,0);
+end
 md.vel_obs=sqrt(md.vx_obs.^2+md.vy_obs.^2);
Index: /issm/trunk/src/m/classes/public/plugvelocities.m
===================================================================
--- /issm/trunk/src/m/classes/public/plugvelocities.m	(revision 2573)
+++ /issm/trunk/src/m/classes/public/plugvelocities.m	(revision 2574)
@@ -23,117 +23,19 @@
 end
 
-%Get variables
-A=whos('-file',filename);
+%load velocities 
+Names=VelFindVarNames(filename);
+Vel=load(filename);
 
-%find x,y,vx and vy
-xenum=NaN; yenum=NaN; vxenum=NaN; vyenum=NaN; indexenum=NaN;
-if length(A)==4,
-	isgrid=1;
-	for i=1:4
-		if strcmpi(A(i).name(1),'x');
-			xenum=i;
-		elseif strcmpi(A(i).name(1),'y');
-			yenum=i;
-		else
-			if (strcmpi(A(i).name(end),'x') | strncmpi(A(i).name,'vx',2));
-				vxenum=i;
-			elseif (strcmpi(A(i).name(end),'y') | strncmpi(A(i).name,'vy',2));
-				vyenum=i;
-			end
-		end
-	end
-elseif length(A)==5,
-	isgrid=0;
-	for i=1:5
-		if strcmpi(A(i).name(1),'x');
-			xenum=i;
-		elseif strcmpi(A(i).name(1),'y');
-			yenum=i;
-		elseif (strcmpi(A(i).name(1),'index') | strcmpi(A(i).name(1),'elements'));
-			indexenum=i;
-		else
-			if (strcmpi(A(i).name(end),'x') | strncmpi(A(i).name,'vx',2));
-				vxenum=i;
-			elseif (strcmpi(A(i).name(end),'y') | strncmpi(A(i).name,'vy',2));
-				vyenum=i;
-			end
-		end
-	end
+%Interpolation
+if strcmpi(Names.interp,'grid'),
+	md.vx_obs=InterpFromGridToMesh(Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vxname),md.x,md.y,default_value);
+	md.vy_obs=InterpFromGridToMesh(Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vyname),md.x,md.y,default_value);
 else
-	error(['plugvelocities error message: file ' filename  ' not supported yet (it should hold 4 variables x,y,vx and vy (for grids) OR 5 variables  x,y,index,vx and vy (for mesh))']);
+	md.vx_obs=InterpFromMeshToMesh2d(Vel.(Names.indexname),Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vxname),md.x,md.y,default_value);
+	md.vy_obs=InterpFromMeshToMesh2d(Vel.(Names.indexname),Vel.(Names.xname),Vel.(Names.yname),Vel.(Names.vyname),md.x,md.y,default_value);
 end
 
-%assum that we have found at least vxenum and vyenum
-if ( isnan(vxenum) | isnan(vyenum))
-	error(['plugvelocities error message: file ' filename  ' not supported yet (the velocities should be named vx and vy)']);
-end
-
-%find index
-if (~isgrid & insnan(indexenum)),
-	for i=1:5
-		lengthi=min(A(i).size);
-		if (lengthi==3),
-			indexenum=i;
-		end
-	end
-	if isnan(indexenum),
-		error(['plugvelocities error message: file ' filename  ' not supported yet (index not found)']);
-	end
-end
-
-%find x y
-if (isnan(xenum) | isnan(yenum))
-
-	%check the size
-	if A(vxenum).size(1)==A(vxenum).size(2),
-		error(['plugvelocities error message: file ' filename  ' not supported (velocities is a square matrix, save x and y with another name)']);
-	end
-	if ~(A(vxenum).size(1)==A(vyenum).size(1) & A(vxenum).size(2)==A(vyenum).size(2)),
-		error(['plugvelocities error message: file ' filename  ' not supported (vx and vy matrices do not have the same size)']);
-	end
-
-	%find xenum and yenum
-	for i=1:4
-		lengthi=max(A(i).size);
-		if ((i~=vxenum) & (lengthi==A(vxenum).size(1) | lengthi==A(vxenum).size(1)+1)),
-			yenum=i;
-		elseif ((i~=vxenum) & (lengthi==A(vxenum).size(2) | lengthi==A(vxenum).size(2)+1)),
-			xenum=i;
-		end
-	end
-
-	%last check
-	if (isnan(xenum) | isnan(yenum))
-		error(['plugdata error message: file ' filename  ' not supported yet']);
-	end
-end
-
-%create names:
-xname=A(xenum).name;
-yname=A(yenum).name;
-vxname=A(vxenum).name;
-vyname=A(vyenum).name;
-if ~isgrid, indexname=A(indexenum).name; end
-
-%load data
-B=load(filename);
-
-%get x y vx and vy
-eval(['x=B.' xname ';']);
-eval(['y=B.' yname ';']);
-eval(['vx=B.' vxname ';']);
-eval(['vy=B.' vyname ';']);
-if ~isgrid, eval(['index=B.' indexname ';']); end
-
-%interpolate
-if isgrid,
-	md.vx_obs=InterpFromGridToMesh(x,y,vx,md.x,md.y,default_value);
-	md.vy_obs=InterpFromGridToMesh(x,y,vy,md.x,md.y,default_value);
-else
-	md.vx_obs=InterpFromMeshToMesh2d(index,x,y,vx,md.x,md.y,default_value);
-	md.vy_obs=InterpFromMeshToMesh2d(index,x,y,vy,md.x,md.y,default_value);
-end
+md.vel_obs=sqrt(md.vx_obs.^2+md.vy_obs.^2);
 md.vx=md.vx_obs;
 md.vy=md.vy_obs;
-md.vel_obs=sqrt(md.vx_obs.^2+md.vy_obs.^2);
 md.vel=md.vel_obs;
Index: /issm/trunk/src/m/utils/Interp/InterpFromFile.m
===================================================================
--- /issm/trunk/src/m/utils/Interp/InterpFromFile.m	(revision 2573)
+++ /issm/trunk/src/m/utils/Interp/InterpFromFile.m	(revision 2574)
@@ -35,185 +35,10 @@
 end
 
-%Get variables
-A=whos('-file',filename);
-
-%check the number of variables
-if (length(A)~=4 & length(A)~=3)
-	error(['plugdata error message: file ' filename  ' not supported yet (it should hold 3 or 4 variables)']);
+%load file
+Names=FieldFindVarNames(filename);
+Data=load(filename);
+if strcmpi(Names.interp,'grid'),
+	data_out=InterpFromGridToMesh(Data.(Names.xname),Data.(Names.yname),Data.(Names.dataname),md.x,md.y,default_value);
+else
+	data_out=InterpFromMeshToMesh2d(Data.(Names.indexname),Data.(Names.xname),Data.(Names.yname),Data.(Names.dataname),md.x,md.y,default_value);
 end
-
-%1: find data using their names
-xenum=NaN; yenum=NaN; indexenum=NaN; dataenum=NaN;
-for i=1:length(A),
-
-	%x -> name begins with "x" and is a vector
-	if (strncmpi(A(i).name,'x',1) & min(A(i).size)==1),
-		xenum=i;
-
-	%y -> name begins with "y" and is a vector
-	elseif (strncmpi(A(i).name,'y',1) & min(A(i).size)==1),
-		yenum=i;
-
-	%index -> name begins with "index" or "elements" and 3 columns
-	elseif length(A)==4
-		if ((strncmpi(A(i).name,'index',5) | strncmpi(A(i).name,'elements',8)) & A(i).size(2)==3),
-			indexenum=i;
-		end
-
-	%data -> name begins with "field" and is a vector or a matrix
-	%elseif (strcmpi(A(i).name,field) & max(A(i).size)>1),
-	%	dataenum=i;
-
-	end
-end
-
-%2: if only one item is missing, find it by elimination
-if length(A)==4
-	pos=find(isnan([xenum yenum indexenum dataenum]));
-	if length(pos)==1,
-		list=[xenum yenum indexenum dataenum]; list(pos)=[];
-		if pos==1,
-			xenum=setdiff(1:4,list);
-		elseif pos==2,
-			yenum=setdiff(1:4,list);
-		elseif pos==3,
-			indexenum=setdiff(1:4,list);
-		elseif pos==4,
-			dataenum=setdiff(1:4,list);
-		end
-	end
-else
-	pos=find(isnan([xenum yenum dataenum]));
-	if length(pos)==1,
-		list=[xenum yenum indexenum dataenum]; list(pos)=[];
-		if pos==1,
-			xenum=setdiff(1:3,list);
-		elseif pos==2,
-			yenum=setdiff(1:3,list);
-		elseif pos==3,
-			dataenum=setdiff(1:3,list);
-		end
-	end
-end
-
-%3: if one or several variables are missing, use sizes instead of names (works only if data is a matrix...)
-if (isnan(xenum) | isnan(yenum) |  isnan(dataenum) | (length(A)==4 & isnan(indexenum)))
-
-	if (length(A)==4 & isnan(indexenum)),
-		for i=1:4
-			if A(i).size(2)==3,
-				indexenum=i;
-			end
-		end
-		if isnan(indexenum)
-			error(['InterpFromFile error message: file ' filename  ' not supported yet (index not found)']);
-		end
-	end
-
-	if isnan(dataenum),
-		maxsize1=1;
-		maxsize2=1;
-
-		%find dataenum
-		for i=1:length(A)
-			sizei=A(i).size;
-			if (sizei(1)>=maxsize1-1 & sizei(2)>=maxsize2-1),
-				dataenum=i
-				maxsize1=sizei(1);
-				maxsize2=sizei(2);
-			end
-		end
-		if isnan(dataenum)
-			error(['InterpFromFile error message: file ' filename  ' not supported yet (data not found)']);
-		end
-		if (A(dataenum).size(1)==A(dataenum).size(2) & isnan(xenum) & isnan(yenum)),
-			error(['InterpFromFile error message: file ' filename  ' not supported (the data is a square matrix, save x and y with another name)']);
-		end
-	end
-
-	%find xenum and yenum
-	if isnan(xenum) | isnan(yenum)
-		for i=1:length(A),
-			lengthi=max(A(i).size);
-			if isnan(yenum) & ((i~=dataenum) & (lengthi==A(dataenum).size(1) | lengthi==A(dataenum).size(1)+1)),
-				yenum=i;
-			elseif isnan(xenum) & ((i~=dataenum) & (lengthi==A(dataenum).size(2) | lengthi==A(dataenum).size(2)+1)),
-				xenum=i;
-			end
-		end
-	end
-
-	%last chance: if only one item is missing, find it by elimination
-	if length(A)==4
-		pos=find(isnan([xenum yenum indexenum dataenum]));
-		if length(pos)==1,
-			list=[xenum yenum indexenum dataenum]; list(pos)=[];
-			if pos==1,
-				xenum=setdiff(1:4,list);
-			elseif pos==2,
-				yenum=setdiff(1:4,list);
-			elseif pos==3,
-				indexenum=setdiff(1:4,list);
-			elseif pos==4,
-				dataenum=setdiff(1:4,list);
-			end
-		end
-	else
-		pos=find(isnan([xenum yenum dataenum]));
-		if length(pos)==1,
-			list=[xenum yenum indexenum dataenum]; list(pos)=[];
-			if pos==1,
-				xenum=setdiff(1:3,list);
-			elseif pos==2,
-				yenum=setdiff(1:3,list);
-			elseif pos==3,
-				dataenum=setdiff(1:3,list);
-			end
-		end
-	end
-
-	%last check
-	if (isnan(xenum) | isnan(yenum) | isnan(dataenum) | (length(A)==4 & isnan(indexenum)))
-		error(['InterpFromFile error message: file ' filename  ' not supported yet (not recognzed variable names or sizes)']);
-	end
-end
-
-%OK, interpolate
-if length(A)==4,
-
-	%create names:
-	xname=A(xenum).name;
-	yname=A(yenum).name;
-	indexname=A(indexenum).name;
-	dataname=A(dataenum).name;
-
-	%load data
-	B=load(filename);
-
-	%get x y and data
-	eval(['x_data=B.' xname ';'])
-	eval(['y_data=B.' yname ';'])
-	eval(['index_data=B.' indexname ';'])
-	eval(['data=B.' dataname ';'])
-
-	%interpolate
-	data_out=InterpFromMeshToMesh2d(index_data,x_data(:),y_data(:),data(:),x(:),y(:),default_value);
-
-else
-
-	%create names:
-	xname=A(xenum).name;
-	yname=A(yenum).name;
-	dataname=A(dataenum).name;
-
-	%load data
-	B=load(filename);
-
-	%get x y and data
-	eval(['x_data=B.' xname ';'])
-	eval(['y_data=B.' yname ';'])
-	eval(['data=B.' dataname ';'])
-
-	%interpolate
-	data_out=InterpFromGridToMesh(x_data(:),y_data(:),data,x(:),y(:),default_value);
-end
Index: /issm/trunk/src/m/utils/Interp/VelFindVarNames.m
===================================================================
--- /issm/trunk/src/m/utils/Interp/VelFindVarNames.m	(revision 2573)
+++ /issm/trunk/src/m/utils/Interp/VelFindVarNames.m	(revision 2574)
@@ -1,4 +1,8 @@
 function Names=VelFindVarNames(filename)
 %VELFINDVARNAMES - find names of variables in a velocity data set file
+%
+%   This routines looks at the variables contained in a file and finds out
+%   the names of the variables that are needed for an interpolation (x,y,vx,vy)
+%   or (index,x,y,vx,vy)
 %
 %   Usage:
