source: issm/trunk/src/m/model/plot/processdata.m@ 6910

Last change on this file since 6910 was 6910, checked in by Mathieu Morlighem, 14 years ago

problem with caxis

File size: 4.6 KB
RevLine 
[4330]1function [data datatype]=processdata(md,data,options);
[1]2%PROCESSDATA - process data to be plotted
3%
[4330]4% datatype = 1 -> elements
5% datatype = 2 -> nodes
6% datatype = 3 -> node quivers
7% datatype = 4 -> patch
8%
[1]9% Usage:
[4330]10% [data datatype]=processdata(md,data,options);
[1]11%
12% See also: PLOTMODEL, PROCESSMESH
13
[27]14%check format
[5123]15if (iscell(data) | isempty(data) | length(data)==0 | (length(data)==1 & ~isstruct(data) & isnan(data))),
[27]16 error('plotmodel error message: data provided is empty');
17end
18
[4330]19%Process Patch
20if isstruct(data)
21 if (isfield(data,'index') & isfield(data,'value')),
22 data=data.value;
23 data=data';
24 data=data(:);
25 datatype=4;
26 else
27 error('structure other than Patch not supported yet');
28 end
29else
30 %initialize datatype
31 datatype=0;
[1740]32end
[4330]33
34%get datatype
[1740]35datasize=size(data);
[1171]36
[4330]37%non patch processing
38if datatype~=4,
[2700]39
[4330]40 %transpose data if necessary
41 if (size(data,2) > size(data,1)),
42 data=data';
43 end
44 datasize=size(data);
[1]45
[4330]46 %convert to double if necessary
47 if ~isnumeric(data);
48 disp('processdata info message: data is not numeric (logical?). Converted to double');
49 data=double(data);
50 end
[1740]51
[4330]52 %check length
53 if datasize(1)~=md.numberofgrids & datasize(1)~=md.numberofelements & datasize(1)~=md.numberofgrids*6 & (md.dim==3 & ~(datasize(1)==md.numberofelements2d | datasize(1)==md.numberofgrids2d))
54 error('plotmodel error message: data not supported yet');
55 end
56
57 %quiver?
58 if datasize(2)>1,
59 datatype=3;
60
61 %check number of columns, add zeros if necessary,
62 if (md.dim==3)
63 if datasize(2)==2,
64 data=[data, zeros(datasize(1),1)];
65 elseif datasize(2)~=3,
66 error('plotmodel error message: data provided should have 2 or 3 columns for quiver plot, and 1 for regular plot');
67 end
[5867]68 %elseif ((md.dim==2) & datasize(2)~=2),
69 % error('plotmodel error message: data provided should have 2 columns for quiver plot, and 1 for regular plot');
[1740]70 end
71 end
72
[4330]73 %treat the case datasize(1)=6*grids
74 if datasize(1)==6*md.numberofgrids
75 %keep the only norm of data
76 data1=data(1:6:md.numberofgrids*6,:);
77 data2=data(2:6:md.numberofgrids*6,:);
78 data=sqrt(data1.^2+data2.^2);
79 datasize(1)=md.numberofgrids;
80 %---> go to grid data
81 end
[1740]82
[4330]83 %treat the case datasize(1)=grids2d
84 if (md.dim==3 & datasize(1)==md.numberofgrids2d),
85 data=project3d(md,data,'node');
86 datasize(1)=md.numberofgrids;
87 %---> go to grid data
88 end
[1]89
[4330]90 %treat the case datasize(1)=grids2d
91 if (md.dim==3 & datasize(1)==md.numberofelements2d),
92 data=project3d(md,data,'element');
93 datasize(1)=md.numberofelements;
94 %---> go to grid data
95 end
[27]96
[4330]97 %smoothing?
98 if exist(options,'smooth')
99 data=averaging(md,data,getfieldvalue(options,'smooth'));
100 datasize(1)=md.numberofgrids;
101 %---> go to grid data
102 end
[2426]103end
104
[1]105%element data
[5428]106if (datasize(1)==md.numberofelements & datasize(2)==1),
[1]107
[4330]108 %Initialize datatype if non patch
109 if datatype~=4,
110 datatype=1;
111 end
112
[1]113 %ice sheet only?
[2477]114 if getfieldvalue(options,'iceshelf',1)==0,
[1740]115 data(find(md.elementoniceshelf),:)=NaN;
[1]116 end
117 %ice shelf only?
[2477]118 if getfieldvalue(options,'icesheet',1)==0,
[1740]119 data(find(~md.elementoniceshelf),:)=NaN;
[1]120 end
[1124]121 %no water?
[2477]122 if getfieldvalue(options,'water',1)==0,
[1740]123 data(find(md.elementonwater),:)=NaN;
[1124]124 end
125 %log?
[2439]126 if exist(options,'log'),
[6497]127 bounds=getfieldvalue(options,'caxis',[min(data(:)) max(data(:))]);
[6708]128 data(find(data<bounds(1)))=bounds(1);
129 if any(data<=0),
[6497]130 error('Log option cannot be applied on negative values. Use caxis option (Rignot''s settings: [1.5 max(data)])');
131 end
[1218]132 pos=find(~isnan(data));
[2439]133 data(pos)=log(data(pos))/log(getfieldvalue(options,'log'));
[1124]134 end
[1]135end
136
137%grid data
[5428]138if (datasize(1)==md.numberofgrids & datasize(2)==1),
[4411]139 datatype=2;
[1]140 %ice sheet only?
[2477]141 if getfieldvalue(options,'iceshelf',1)==0,
[1]142 pos=find(md.gridoniceshelf);
[1740]143 data(pos,:)=NaN;
[1]144 end
145 %ice shelf only?
[2477]146 if getfieldvalue(options,'icesheet',1)==0,
[1]147 pos=find(md.gridonicesheet);
[1740]148 data(pos,:)=NaN;
[1]149 end
[1124]150 %no water?
[2477]151 if getfieldvalue(options,'water',1)==0,
[1124]152 pos=find(md.gridonwater);
[1740]153 data(pos,:)=NaN;
[1124]154 end
155 %log?
[2439]156 if exist(options,'log'),
[6497]157 bounds=getfieldvalue(options,'caxis',[min(data(:)) max(data(:))]);
[6910]158 data(find(data<bounds(1)))=bounds(1);
[6908]159 if any(data<=0),
[6497]160 error('Log option cannot be applied on negative values. Use caxis option (Rignot''s settings: [1.5 max(data)])');
161 end
[2439]162 data=log(data)/log(getfieldvalue(options,'log'));
[1124]163 end
164
[1]165end
166
167%layer projection?
[2439]168if getfieldvalue(options,'layer',0)>=1,
169 data=project2d(md,data,getfieldvalue(options,'layer')); %project onto 2d mesh
[1]170end
[1744]171
172%control arrow density if quiverplot
[4330]173if datatype==3 & exist(options,'density')
[1744]174 databak=data;
175 data=NaN*ones(datasize);
[2439]176 density=getfieldvalue(options,'density');
177 data(1:density:end,:)=databak(1:density:end,:);
[1744]178 clear databak
179end
Note: See TracBrowser for help on using the repository browser.