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

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

problem with log

File size: 4.5 KB
Line 
1function [data datatype]=processdata(md,data,options);
2%PROCESSDATA - process data to be plotted
3%
4% datatype = 1 -> elements
5% datatype = 2 -> nodes
6% datatype = 3 -> node quivers
7% datatype = 4 -> patch
8%
9% Usage:
10% [data datatype]=processdata(md,data,options);
11%
12% See also: PLOTMODEL, PROCESSMESH
13
14%check format
15if (iscell(data) | isempty(data) | length(data)==0 | (length(data)==1 & ~isstruct(data) & isnan(data))),
16 error('plotmodel error message: data provided is empty');
17end
18
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;
32end
33
34%get datatype
35datasize=size(data);
36
37%non patch processing
38if datatype~=4,
39
40 %transpose data if necessary
41 if (size(data,2) > size(data,1)),
42 data=data';
43 end
44 datasize=size(data);
45
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
51
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
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');
70 end
71 end
72
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
82
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
89
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
96
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
103end
104
105%element data
106if (datasize(1)==md.numberofelements & datasize(2)==1),
107
108 %Initialize datatype if non patch
109 if datatype~=4,
110 datatype=1;
111 end
112
113 %ice sheet only?
114 if getfieldvalue(options,'iceshelf',1)==0,
115 data(find(md.elementoniceshelf),:)=NaN;
116 end
117 %ice shelf only?
118 if getfieldvalue(options,'icesheet',1)==0,
119 data(find(~md.elementoniceshelf),:)=NaN;
120 end
121 %no water?
122 if getfieldvalue(options,'water',1)==0,
123 data(find(md.elementonwater),:)=NaN;
124 end
125 %log?
126 if exist(options,'log'),
127 bounds=getfieldvalue(options,'caxis',[min(data(:)) max(data(:))]);
128 data(find(data<bounds(1)))=bounds(1);
129 if any(data<=0),
130 error('Log option cannot be applied on negative values. Use caxis option (Rignot''s settings: [1.5 max(data)])');
131 end
132 pos=find(~isnan(data));
133 data(pos)=log(data(pos))/log(getfieldvalue(options,'log'));
134 end
135end
136
137%grid data
138if (datasize(1)==md.numberofgrids & datasize(2)==1),
139 datatype=2;
140 %ice sheet only?
141 if getfieldvalue(options,'iceshelf',1)==0,
142 pos=find(md.gridoniceshelf);
143 data(pos,:)=NaN;
144 end
145 %ice shelf only?
146 if getfieldvalue(options,'icesheet',1)==0,
147 pos=find(md.gridonicesheet);
148 data(pos,:)=NaN;
149 end
150 %no water?
151 if getfieldvalue(options,'water',1)==0,
152 pos=find(md.gridonwater);
153 data(pos,:)=NaN;
154 end
155 %log?
156 if exist(options,'log'),
157 %if any(data<=0),
158 % error('Log option cannot be applied on negative values. Use caxis option (Rignot''s settings: [1.5 max(data)])');
159 %end
160 data=log(data)/log(getfieldvalue(options,'log'));
161 end
162
163end
164
165%layer projection?
166if getfieldvalue(options,'layer',0)>=1,
167 data=project2d(md,data,getfieldvalue(options,'layer')); %project onto 2d mesh
168end
169
170%control arrow density if quiverplot
171if datatype==3 & exist(options,'density')
172 databak=data;
173 data=NaN*ones(datasize);
174 density=getfieldvalue(options,'density');
175 data(1:density:end,:)=databak(1:density:end,:);
176 clear databak
177end
Note: See TracBrowser for help on using the repository browser.