Index: /issm/trunk/src/m/classes/public/modelextract.m
===================================================================
--- /issm/trunk/src/m/classes/public/modelextract.m	(revision 1299)
+++ /issm/trunk/src/m/classes/public/modelextract.m	(revision 1300)
@@ -1,3 +1,3 @@
-function md2=modelextract(md1,area)
+function md2=modelextract(md1,area,varargin)
 %MODELEXTRACT - extract a model according to an Argus contour or flag list
 %
@@ -20,5 +20,5 @@
 
 %some checks
-if ((nargin~=2) | (nargout~=1)),
+if ((nargin~=2 & nargin~=3) | (nargout~=1)),
 	help modelextract
 	error('modelextract error message: bad usage');
@@ -26,4 +26,11 @@
 if strcmpi(md1.type,'3d'),
 	error('modelextract error message: only 2d model supported yet. Use BasinConstrain instead');
+end
+
+%get check option
+if (nargin==3 & varargin{1}==0),
+	checkoutline=0;
+else
+	checkoutline=1;
 end
 
@@ -37,4 +44,5 @@
 		invert=0;
 	else
+
 		%make sure that we actually don't want the elements outside the domain outline!
 		if strcmpi(area(1),'~'),
@@ -44,14 +52,18 @@
 			invert=0;
 		end
+
 		%ok, flag_elem elements
 		A=expread(area,1);
 		flag_elem=ContourToMesh(md1.elements(:,1:3),md1.x,md1.y,A,'element',1);
+
 		%check that the elements do not cross the contour -> flag as 0
-		pos=find(flag_elem);
-		for contour=1:length(A)
-			for i=1: length(pos)
-				test=cross_extract(md1.x(md1.elements(pos(i),:)),md1.y(md1.elements(pos(i),:)),A(contour).x,A(contour).y);
-				if test
-					flag_elem(pos(i))=0;
+		if checkoutline,
+			pos=find(flag_elem);
+			for contour=1:length(A)
+				for i=1: length(pos)
+					test=cross_extract(md1.x(md1.elements(pos(i),:)),md1.y(md1.elements(pos(i),:)),A(contour).x,A(contour).y);
+					if test
+						flag_elem(pos(i))=0;
+					end
 				end
 			end
@@ -252,4 +264,19 @@
 
 	%Results fields
+	if isstruct(md1.results),
+		solutionfields=fields(md1.results);
+		for i=1:length(solutionfields),
+			%get subfields
+			solutionsubfields=fields(md1.results.(solutionfields(i)));
+			for j=1:length(solutionsubfields),
+				field=md1.results.(solutionfields(i)).(solutionsubfields(j));
+				if length(field)==numberofgrids1,
+					md2.results.(solutionfields(i)).(solutionsubfields(j))=field(pos_grid);
+				elseif length(field)==numberofelements1,
+					md2.results.(solutionfields(i)).(solutionsubfields(j))=field(pos_elem);
+				end
+			end
+		end
+	end
 	if ~isnan(md2.vx), md2.vx=md1.vx(pos_grid); end;
 	if ~isnan(md2.vy), md2.vy=md1.vy(pos_grid); end;
