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

Last change on this file since 7081 was 7081, checked in by Eric.Larour, 14 years ago

quick hack to handle P0 interpolation

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