VERB_code_2.3
load_plt.m
1 function [varargout]=load_plt(filename, varargin)
2 
3 nozone = false;
4 dosqueeze = true;
5 dopermute = true;
6 first_zone = 1;
7 n_zones = 4096;
8 skip_zones = 0;
9 
10 comments={};
11 
12 if (nargin > 1)
13  for it = 1:1:nargin-1
14  if strcmp(varargin(it), 'nopermute')
15  dopermute = false;
16  elseif strcmp(varargin(it), 'permute')
17  dopermute = true;
18 % permute_mask = varargin(it+1);
19  elseif strcmp(varargin(it), 'squeeze')
20  dosqueeze = true;
21  elseif strcmp(varargin(it), 'nosqueeze')
22  dosqueeze = false;
23  elseif strcmp(varargin(it), 'nozone')
24  nozone = true;
25  elseif strcmp(varargin(it), 'first_zone')
26  first_zone = varargin{it+1};
27  it = it + 1;
28  elseif strcmp(varargin(it), 'n_zones')
29  n_zones = varargin{it+1};
30  it = it + 1;
31  elseif strcmp(varargin(it), 'skip_zones')
32  skip_zones = varargin{it+1};
33  it = it + 1;
34  end
35  end
36 end
37 % if (~(strcmp(varargin(1), 'dosqueeze')))
38 % dosqueeze = false;
39 % end;
40 %end;
41 
42 
43 fid = fopen(filename);
44 
45 f_names = fgetl(fid);
46 while (length(f_names) == 0 || f_names(1) == '#')
47  comments = [comments, f_names];
48  f_names = fgetl(fid);
49 end;
50 
51 f_names = regexpi(f_names, '"(.*?)"', 'match');
52 n_of_vars = size(f_names,2);
53 for it = 1:n_of_vars
54 %%% vars(it).name = strrep(f_names(it){1}, '"', ''); %%%
55  vars(it).name = strrep(f_names{it}, '"', ''); %%%
56  vars(it).comments = comments;
57 end
58 
59 zone_number = 0;
60 sz = 0;
61 zn = 0;
62 time = 0;
63 tmp = fgetl(fid);
64 while (~nozone && ((length(tmp) < 4) || (strcmpi(tmp([1:4]), 'ZONE') ~= 1)))
65  tmp = fgetl(fid);
66 end;
67 
68 % assume all zones have the same size. Would not work otherwise anyway.
69 t = regexpi(tmp, 'T="(.*)"', 'tokens');
70 if (length(t) > 0) time = str2num(t{1}{1}); end;
71 
72 t = regexpi(tmp, 'I=\D*([0-9]+)', 'tokens');
73 if (length(t) > 0) size1 = str2num(t{1}{1}); else size1 = 0; end;
74 t = regexpi(tmp, 'J=\D*([0-9]+)', 'tokens');
75 if (length(t) > 0) size2 = str2num(t{1}{1}); else size2 = 0; end;
76 t = regexpi(tmp, 'K=\D*([0-9]+)', 'tokens');
77 if (length(t) > 0) size3 = str2num(t{1}{1}); else size3 = 0; end;
78 
79 %try
80  while((length(tmp) >= 4) && (max(tmp ~= -1)) && strcmpi(tmp([1:4]), 'ZONE') && zone_number < n_zones)
81 
82  t = regexpi(tmp, 'T="(.*)"', 'tokens');
83  if (length(t) > 0) time = str2num(t{1}{1}); end;
84 
85 % t = regexpi(tmp, 'I=\D*([0-9]+)', 'tokens');
86 % if (length(t) > 0) size1 = str2num(t{1}{1}); else size1 = 0; end;
87 % t = regexpi(tmp, 'J=\D*([0-9]+)', 'tokens');
88 % if (length(t) > 0) size2 = str2num(t{1}{1}); else size2 = 0; end;
89 % t = regexpi(tmp, 'K=\D*([0-9]+)', 'tokens');
90 % if (length(t) > 0) size3 = str2num(t{1}{1}); else size3 = 0; end;
91 
92 
93 % if ((max(size(size1)) + max(size(size2)) + max(size(size2))) == 0)
94  if ((size1 + size2 + size2) == 0)
95  f_arr = fscanf(fid, '%f', [n_of_vars, inf]);
96  size1 = size(f_arr, 2);
97  size2 = 1;
98  size3 = 1;
99  else
100 % if (max(size(size2)) == 0) size2 = 1; end;
101 % if (max(size(size3)) == 0) size3 = 1; end;
102  if (size2 == 0) size2 = 1; end;
103  if (size3 == 0) size3 = 1; end;
104  total_size = size1 * size2 * size3;
105  f_arr = fscanf(fid, '%f', [n_of_vars, total_size]);
106  if (size2 == 1 && size3 == 1) size1 = max(size(f_arr)); end;
107  end
108 
109  tmp = fgetl(fid); % read to the end of line
110  while (~feof(fid) && ((length(tmp) < 4) || (strcmpi(tmp([1:4]), 'ZONE') ~= 1)))
111  tmp = fgetl(fid);
112  end;
113 
114  if (zn >= first_zone-1)
115  if sz <= 0
116  if (zone_number > 0)
117  ['Loading: time = ', num2str(time), '...']
118  end;
119  sz = skip_zones+1;
120  zone_number = zone_number + 1;
121  for var_number = 1:n_of_vars
122  if (length(time) > 0) vars(var_number).time(zone_number) = time; end; %stupid, but do not know other way to check if it is number...
123  vars(var_number).size1 = size1;
124  vars(var_number).size2 = size2;
125  vars(var_number).size3 = size3;
126  vars(var_number).arr(zone_number, :, :, :) = reshape(f_arr(var_number, :), [size1, size2, size3]);
127  % vars(var_number).arr(zone_number, :, :, :) = reshape(f_arr(var_number, :), [size3, size2, size1]);
128  end
129  end
130  sz = sz - 1;
131  else
132  zn = zn + 1;
133  end
134 
135  end
136 %catch
137 
138 %end
139 
140 
141 if (zone_number == 0)
142 
143  f_arr =
double max(double v1, double v2)
Return maximum.