rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
gen_and_test_basis.m
1 function gen_and_test_basis(compute_RB_methods,test_RB_methods)
2 %function gen_and_test_basis(compute_RB_methods,test_RB_methods)
3 %
4 % function performing basis generation by different methods or
5 % testing of bases. The cell-array compute_RB_methods contains a
6 % list of basis-names to generate and save. Similarly the
7 % test_RB_methods contains the names of the files to read. These
8 % are extended and stored in a new filename extended by '_tested'.
9 
10 % Bernard Haasdonk 9.6.2007
11 
12 %%% basic structures
13 
14 % make sure, that the following path exists!
15 basisgen_savepath = fullfile(getenv('RBMATLABTEMP'),'basisgen');
16 if ~exist(basisgen_savepath)
17  error('please create savepath!');
18 end;
19 
20 % select here, which methods of the ones below are to be called
21 % for construction
22 
23 %compute_RB_methods = {}
24 
25 % for paper-experiments:
26 %compute_RB_methods = {...
27 % 'RB_adaptive_refined_2_2_r1_smax1000_theta5e-2',...
28 % 'RB_adaptive_refined_2_2_r5_smax1000_theta5e-2',...
29 % 'RB_adaptive_refined_2_2_r1_smax1000_theta1e-1',...
30 % 'RB_adaptive_refined_2_2_r5_smax1000_theta1e-1',...
31 % 'RB_uniform_refined_2_2_r5',...
32 % };
33 %compute_RB_methods = {...
34 % 'RB_uniform_refined_2_2_r1',...
35 % 'RB_uniform_refined_2_2_r5',...
36 % 'RB_uniform_fixed_64',...
37 % 'RB_uniform_fixed_256',...
38 % 'RB_uniform_refined_2_2_r1',...
39 % 'RB_uniform_refined_2_2_r5',...
40 % 'RB_adaptive_refined_2_2_r1_smax1000_theta5e-2',...
41 % 'RB_adaptive_refined_2_2_r5_smax1000_theta5e-2',...
42 % 'RB_adaptive_refined_2_2_r1_smax1000_theta1e-1',...
43 % 'RB_adaptive_refined_2_2_r5_smax1000_theta1e-1',...
44 % };
45 
46 
47 
48 
49 %compute_RB_methods = {...
50 % 'RB_adaptive_refined_2_2_r1_smax1000',...
51 % 'RB_adaptive_refined_2_2_r1_smax100'}; %,...
52 
53 % 'RB_adaptive_refined_2_2_r1_smax10',...
54 % 'RB_adaptive_refined_2_2_r1_smax5',...
55 % 'RB_adaptive_refined_2_2_r1_smax1'};
56 
57 %compute_RB_methods = { 'RB_adaptive_refined_3_3',...
58 % 'RB_uniform_refined_3_3',...
59 % 'RB_random_fixed_50',...
60 % 'RB_random_fixed_100',...
61 % 'RB_uniform_fixed_49',...
62 % 'RB_uniform_fixed_100' ...
63 % };
64 %compute_RB_methods = {'RB_random_fixed_100'};
65 %compute_RB_methods = {'RB_uniform_fixed_49'};
66 %compute_RB_methods = {'RB_uniform_refined_3_3'};
67 %compute_RB_methods = {'RB_adaptive_refined_3_3'};
68 %compute_RB_methods = {'RB_adaptive_refined_3_3_Nmax40'};
69 %compute_RB_methods = {'RB_adaptive_refined_3_3'};
70 %compute_RB_methods = {'RB_adaptive_refined_2_2',...
71 % 'RB_uniform_fixed_100' ...
72 % };
73 
74 %compute_RB_methods = {'RB_adaptive_refined_2_2_r1', ...
75 % 'RB_adaptive_refined_2_2_r2', ...
76 % 'RB_adaptive_refined_2_2_r5', ...
77 % 'RB_adaptive_refined_2_2_r10'};
78 %compute_RB_methods = {'RB_uniform_fixed_16', ...
79 % 'RB_uniform_fixed_64', ...
80 % 'RB_uniform_fixed_256', ...
81 % 'RB_uniform_fixed_1024', ...
82 % 'RB_random_fixed_16', ...
83 % 'RB_random_fixed_64', ...
84 % 'RB_random_fixed_256', ...
85 % 'RB_random_fixed_1024'};
86 
87 %compute_RB_methods = {};
88 
89 % select here, which methods of the ones below are to be called
90 % for test
91 
92 %test_RB_methods = compute_RB_methods;
93 
94 if nargin<2
95  test_RB_methods = {};
96 end;
97 
98 %test_RB_methods = {...
99 % 'RB_uniform_refined_2_2_r1',...
100 % 'RB_uniform_refined_2_2_r5',...
101 % 'RB_uniform_fixed_64',...
102 % 'RB_uniform_fixed_256',...
103 % 'RB_uniform_refined_2_2_r1',...
104 % 'RB_uniform_refined_2_2_r5',...
105 % 'RB_adaptive_refined_2_2_r1_smax1000_theta5e-2',...
106 % 'RB_adaptive_refined_2_2_r5_smax1000_theta5e-2',...
107 % 'RB_adaptive_refined_2_2_r1_smax1000_theta1e-1',...
108 % 'RB_adaptive_refined_2_2_r5_smax1000_theta1e-1',...
109 % };
110 
111 %test_RB_indicators = {}; % none
112 %test_RB_indicators = {'error','estimator'};
113 test_RB_indicators = {'estimator'}; % only estimators
114 
115 % set initial parameters
116 %orgparams = basisgen_init_params;
117 
118 disp('1. setting common parameters.');
119 
120 params = [];
121 
122 params.xrange = [0,1000e-6]; % grid x-coordinate range
123 params.yrange = [0,200e-6]; % grid y-coordinate range
124 params.T = 0.5; % maximum time
125 params.xnumintervals = 200; % number of grid cellls in x-direction
126 params.ynumintervals = 40; % number of grid cellls in y-direction
127 params.nt = 200; % number of time steps
128 
129 % set upper boundary to dirichlet, middle of upper and the lower boundary
130 % to neuman
131 % left set to dirichlet, right set to outflow
132 
133 params.bnd_rect_corner1 = [params.xrange(1) , params.yrange(2) ; ...
134  params.xrange(1)+ 250e-6 , params.yrange(2); ...
135  params.xrange(1) , params.yrange(1); ...
136  params.xrange(1) , params.yrange(1);
137  params.xrange(2) , params.yrange(1)
138  ];
139 params.bnd_rect_corner1 = params.bnd_rect_corner1' - eps;
140 params.bnd_rect_corner2 = [params.xrange(2), params.yrange(2); ...
141  params.xrange(2)-250e-6, params.yrange(2); ...
142  params.xrange(2), params.yrange(1);
143  params.xrange(1),params.yrange(2);
144  params.xrange(2),params.yrange(2)
145  ];
146 params.bnd_rect_corner2 = params.bnd_rect_corner2' + eps;
147 
148 params.bnd_rect_index = [-1, -2, -2 , -1, -2 ...
149  ];
150 %params.name_dirichlet_values = 'homogeneous';
151 %params.c_dir = 1.0;
152 
153 % nur oben nonzero values, darunter 0 von links hinein.
154 %params.name_dirichlet_values = 'uplow';
155 %params.c_dir_up = 1.0;
156 %params.c_dir_low = 000.0;
157 %params.dir_middle = params.yrange(2)-eps;
158 
159 % nur Einfluss linke obere Ecke
160 %params.name_dirichlet_values = 'box';
161 %params.dir_box_xrange = [params.xrange(1)-eps, 0.5*(params.xrange(1) ...
162 % + params.xrange(2))];
163 %params.dir_box_yrange = [params.yrange(2)-eps, params.yrange(2)+eps];
164 %params.c_dir = 1.0;
165 
166 % nur Einfluss linke obere Ecke oder rechte obere (Konvexcombination)
167 params.name_dirichlet_values = 'weighted_boxes';
168 params.dir_box_xrange = {[params.xrange(1)-eps, ...
169  0.5*(params.xrange(1)+params.xrange(2))], ...
170  [0.5*(params.xrange(1)+params.xrange(2))-eps, ...
171  params.xrange(2)]...
172  };
173 params.dir_box_yrange = {[params.yrange(2)-eps, params.yrange(2)+eps], ...
174  [params.yrange(2)-eps, params.yrange(2)+eps] ...
175  };
176 params.c_dir = 1.0; % maximum value
177 params.beta = 0.0; % weighting parameter: 1=box1, 0 = box2
178 
179 params.name_neuman_values = 'rightflow';
180 %params.name_neuman_values = 'zero';
181 %params.name_neuman_values = 'homogeneous';
182 %params.c_neu = 0;
183 
184 % parameters inducing "affine dependency" into the problem
185 params.name_diffusivity = 'homogeneous';
186 %params.name_diffusive_num_flux = 'gradient2';
187 params.name_diffusive_num_flux = 'gradient';
188 %params.k = 0.000000; % diffusion coefficient
189 %params.k = 0.000001; % diffusion coefficient
190 %params.k = 1e-15; % diffusion coefficient
191 %params.k = 1e-10; % diffusion coefficient
192 params.k = 1e-5; % diffusion coefficient
193 
194 %params.name_flux = 'gdl_pgrad_and_parabola';
195 %params.v_in_max = 0.0; % maximum inflow velocity 0 to 1 is OK
196 
197 % precomputed, divcleaned velocity field
198 params.name_flux = 'gdl2';
199 % if precomputed div-cleaned flux is wanted, set this flag.
200 disp('using precomputed velocity matrix file!!');
201 params.use_velocity_matrixfile = 1;
202 params.divclean_mode = 'none'; % file is already cleaned by optimization
203 
204 %in case of later matrix generation: downscale original velocities
205 %params.divclean_downscale = 1;
206 %params.divclean_downscale_quota = 0.04;
207 
208 params.lambda = 2.0e-7; % v = - lambda * grad p
209 % set matrix-file name for optional generation or reading of file
210 params.velocity_matrixfile = ['vel_',params.name_flux,'_',...
211  num2str(params.xnumintervals),'x',...
212  num2str(params.ynumintervals),...
213  '_l',num2str(params.lambda),'.mat'];
214 
215 params.name_convective_num_flux = 'lax-friedrichs';
216 %params.lxf_lambda = 0.1172; % lambda value for Lax-Friedrichs diffusivity
217 %params.lxf_lambda = 0.001172; % lambda value for Lax-Friedrichs diffusivity
218 
219 %params.name_init_values = 'homogeneous';
220 %params.c_init = 0.0;
221 
222 params.name_init_values = 'wave';
223 params.freq_x = 5*2*pi/1000e-6;
224 params.freq_y = 0;
225 params.c_init = 1.0;
226 
227 %params.name_init_values = 'homogeneous';
228 %params.c_init = 0.3;
229 
230 %params.name_init_values = 'leftright';
231 %params.c_init_left = 0.3;
232 %params.c_init_right = 0.7;
233 %params.init_middle = (params.xrange(2)+params.xrange(1))/2;
234 
235 % output options:
236 params.verbose = 10; % 0 : no output,
237  % >9 : informative output
238  % >19 : verbose informative output
239  % >29 : debug output
240  % >99 : desperate debug output, with dbstops
241 params.show_colorbar = 1;
242 params.colorbar_mode = 'EastOutside';
243 
244 % generate cartesian grid
245 params.gridtype = 'rectgrid';
246 
247 %params.epsilon = 1e-6;
248 %params.epsilon = 1e-4; % => No refinement required, single extension loop..!!
249 %params.affine_decomp_mode= 'none';
250 params.L_I_inv_norm_bound = 1;
251 params.L_E_norm_bound = 1;
252 %params.detailed_simulation_algorithm = 'fv_conv_diff_operators';
253 params.detailed_simulation_algorithm = 'detailed_simulation';
254 params.operators_algorithm = 'fv_operators_implicit_explicit';
255 params.init_values_algorithm = 'fv_init_values';
256 params.inner_product_matrix_algorithm = 'fv_inner_product_matrix';
257 params.error_algorithm = 'fv_error';
258 params.lxf_lambda = 1.0194e+003;
259 params.data_const_in_time = 1;
260 params.error_norm = 'l2';
261 %keyboard;
262 
263 % set rb-parameter information: 2d, cinit fixed to 1
264 % in 3d-parameter set examples below ("p3" stringpart) these
265 % settings are changed.
266 params.mu_names = {'beta','k'};
267 params.mu_ranges = {[0 1],[0 5e-8]};
268 
269 % choose extension method
270 params.RB_extension_algorithm = 'RB_extension_PCA_fixspace';
271 % 'RB_extension_max_error_snapshot'};
272 params.RB_stop_timeout = 60*60; % 1 hour
273 
274 % target accuracy epsilon:
275 
276 params.RB_stop_epsilon = 1e-9; % 0.003 is already realized by init data!!
277 %params.stop_on_val_train_ratio = 0;
278 
279 % decide, whether estimator or true error is error-indicator for greedy
280 % params.RB_error_indicator = 'error'; % true error
281 params.RB_error_indicator = 'estimator'; % Delta from rb_simulation
282 
283 % test parameters
284 params.RB_detailed_test_savepath = 'test_data_100';
285 params.RB_test_size = 1000;
286 
287 params.rb_problem_type = 'lin_evol';
288 
289 % --------------------------------------------------------------------------
290 
291 % store original params
292 
293 orgparams = params;
294 
295 for meth = 1:length(compute_RB_methods)
296 
297  disp('--------------------------------------------------------------')
298  disp(['starting basis construction for ',compute_RB_methods{meth}]);
299  disp('clearing cache for fair time comparisons')
300  filecache_clear;
301  % reload params, such that independent of order of loop
302  params = orgparams;
303 
304  switch compute_RB_methods{meth}
305 
306  % ------------------------------------- --------------------------
307  % ------------------- 2D Parameterspace --------------------------
308  % ------------------------------------- --------------------------
309 
310  case {'RB_random_fixed_16', ...
311  'RB_random_fixed_64', ...
312  'RB_random_fixed_256', ...
313  'RB_random_fixed_1024'}
314 
315  params.RB_stop_Nmax = 130;
316  rpos = findstr('_',compute_RB_methods{meth});
317  ntrain = str2num(compute_RB_methods{meth}(rpos(end)+1:end));
318  disp(['extracted ntrain value = ',num2str(ntrain)]);
319 
320  params.RB_generation_mode = 'random_fixed'
321  params.RB_train_size = ntrain;
322  params.RB_train_rand_seed = 12345;
323  detailed_data = rb_detailed_prep(params);
324 
325  case {'RB_uniform_fixed_16', ...
326  'RB_uniform_fixed_64', ...
327  'RB_uniform_fixed_256', ...
328  'RB_uniform_fixed_1024'}
329 
330  params.RB_stop_Nmax = 130;
331  rpos = findstr('_',compute_RB_methods{meth});
332  ntrain = str2num(compute_RB_methods{meth}(rpos(end)+1:end));
333  numintervals = sqrt(ntrain)-1;
334  disp(['extracted numintervals value = ',num2str(numintervals)]);
335 
336  %params.RB_extension_stop = 'epsilon';
337  params.RB_generation_mode = 'uniform_fixed'
338  params.RB_numintervals = ones(1,2) * numintervals;
339  detailed_data = rb_detailed_prep(params);
340 
341  case 'RB_adaptive_refined_3_3'%% 3. adaptive refined method:
342 
343  params.RB_stop_Nmax = 130;
344  params.RB_generation_mode = 'refined';
345  params.RB_refinement_mode = 'adaptive';
346  params.RB_element_indicator_mode = 'nodes_cogs';
347  params.RB_numintervals = [2,2];
348  %params.RB_extension_stop = 'epsilon_or_pe_ratio';
349  %params.epsilon = 5e-5;
350  %params.epsilon = 1e-3;
351  % params.RB_stop_max_val_train_ratio = 1.2;
352  params.RB_stop_max_val_train_ratio = 1.2;
353  params.RB_M_val_size = 10;
354  params.RB_val_rand_seed = 2345;
355  params.RB_refinement_theta = 0.05;
356  params.RB_max_refinement_level = 15;
357 
358  detailed_data = rb_detailed_prep(params);
359 
360  case 'RB_adaptive_refined_2_2'%% 3. adaptive refined method:
361 
362  params.RB_stop_Nmax = 130;
363  params.RB_generation_mode = 'refined';
364  params.RB_refinement_mode = 'adaptive';
365  params.RB_element_indicator_mode = 'nodes_cogs';
366  params.RB_numintervals = [1,1];
367  %params.RB_extension_stop = 'epsilon_or_pe_ratio';
368  %params.epsilon = 5e-5;
369  %params.epsilon = 1e-3;
370  % params.RB_stop_max_val_train_ratio = 1.2;
371  params.RB_stop_max_val_train_ratio = 1.2;
372  params.RB_M_val_size = 10;
373  params.RB_val_rand_seed = 2345;
374  params.RB_refinement_theta = 0.05;
375  params.RB_max_refinement_level = 8;
376 
377  detailed_data = rb_detailed_prep(params);
378 
379  case {'RB_adaptive_refined_2_2_r1', ...
380  'RB_adaptive_refined_2_2_r2', ...
381  'RB_adaptive_refined_2_2_r5', ...
382  'RB_adaptive_refined_2_2_r10'} %% 3. adaptive refined method:
383 
384  params.RB_stop_Nmax = 130;
385  rpos = findstr('r',compute_RB_methods{meth});
386  rvalue = str2num(compute_RB_methods{meth}(rpos(end)+1:end));
387  disp(['extracted r value = ',num2str(rvalue)]);
388 
389  params.RB_generation_mode = 'refined';
390  params.RB_refinement_mode = 'adaptive';
391  params.RB_element_indicator_mode = 'nodes_skippedrefs';
392  params.RB_element_indicator_s_max = 10;
393 
394  params.RB_numintervals = [1,1];
395  %params.RB_extension_stop = 'epsilon_or_pe_ratio';
396  %params.epsilon = 5e-5;
397  %params.epsilon = 1e-3;
398  % params.RB_stop_max_val_train_ratio = 1.2;
399  params.RB_stop_max_val_train_ratio = rvalue;
400  params.RB_M_val_size = 10;
401  params.RB_val_rand_seed = 2345;
402  params.RB_refinement_theta = 0.05;
403  params.RB_max_refinement_level = 9;
404 
405  detailed_data = rb_detailed_prep(params);
406  case {'RB_adaptive_refined_2_2_r1_smax10',...
407  'RB_adaptive_refined_2_2_r1_smax1',...
408  'RB_adaptive_refined_2_2_r1_smax5',...
409  'RB_adaptive_refined_2_2_r1_smax1000',...
410  'RB_adaptive_refined_2_2_r1_smax100'};
411 
412  params.RB_stop_Nmax = 130;
413  rpos = findstr('x',compute_RB_methods{meth});
414  smax = str2num(compute_RB_methods{meth}(rpos(end)+1:end));
415  disp(['extracted smax value = ',num2str(smax)]);
416 
417  params.RB_generation_mode = 'refined';
418  params.RB_refinement_mode = 'adaptive';
419  params.RB_element_indicator_mode = 'nodes_skippedrefs';
420  params.RB_element_indicator_s_max = smax;
421 
422  params.RB_numintervals = [1,1];
423  %params.RB_extension_stop = 'epsilon_or_pe_ratio';
424  %params.epsilon = 5e-5;
425  %params.epsilon = 1e-3;
426  % params.RB_stop_max_val_train_ratio = 1.2;
427  params.RB_stop_max_val_train_ratio = 1;
428  params.RB_M_val_size = 10;
429  params.RB_val_rand_seed = 2345;
430  params.RB_refinement_theta = 0.05;
431  params.RB_max_refinement_level = 9;
432 
433  detailed_data = rb_detailed_prep(params);
434 
435  case { 'RB_adaptive_refined_2_2_r1_smax1000_theta5e-2',...
436  'RB_adaptive_refined_2_2_r5_smax1000_theta5e-2',...
437  'RB_adaptive_refined_2_2_r1_smax1000_theta1e-1',...
438  'RB_adaptive_refined_2_2_r5_smax1000_theta1e-1'}
439 
440  params.RB_stop_Nmax = 130;
441  smaxpos = findstr('smax',compute_RB_methods{meth});
442  rpos = findstr('r',compute_RB_methods{meth});
443  thetapos = findstr('theta',compute_RB_methods{meth});
444  rvalue = str2num(compute_RB_methods{meth}(rpos(end)+1:smaxpos(end)-2));
445  disp(['extracted rvalue = ',num2str(rvalue)]);
446  smax = str2num(compute_RB_methods{meth}(smaxpos(end)+4:thetapos(end)-2));
447  disp(['extracted smax value = ',num2str(smax)]);
448  theta = str2num(compute_RB_methods{meth}(thetapos(end)+5:end));
449  disp(['extracted theta value = ',num2str(theta)]);
450 
451  params.RB_generation_mode = 'refined';
452  params.RB_refinement_mode = 'adaptive';
453  params.RB_element_indicator_mode = 'nodes_skippedrefs';
454  params.RB_element_indicator_s_max = smax;
455 
456  params.RB_numintervals = [1,1];
457  %params.RB_extension_stop = 'epsilon_or_pe_ratio';
458  %params.epsilon = 5e-5;
459  %params.epsilon = 1e-3;
460  % params.RB_stop_max_val_train_ratio = 1.2;
461  params.RB_stop_max_val_train_ratio = rvalue;
462  params.RB_M_val_size = 10;
463  params.RB_val_rand_seed = 2345;
464  params.RB_refinement_theta = theta;
465  params.RB_max_refinement_level = 9;
466 
467  detailed_data = rb_detailed_prep(params);
468 
469 
470  case 'RB_adaptive_refined_3_3_Nmax40'
471 
472  params.RB_stop_Nmax = 130;
473  params.RB_generation_mode = 'refined';
474  params.RB_refinement_mode = 'adaptive';
475  params.RB_element_indicator_mode = 'nodes_cogs';
476  params.RB_numintervals = [2,2];
477  %params.RB_extension_stop = 'epsilon_or_pe_ratio';
478  %params.epsilon = 5e-5;
479  %params.epsilon = 1e-3;
480  % params.RB_stop_max_val_train_ratio = 1.2;
481  params.RB_stop_max_val_train_ratio = 1.2;
482  params.RB_M_val_size = 10;
483  params.RB_val_rand_seed = 2345;
484  params.RB_refinement_theta = 0.05;
485  params.RB_max_refinement_level = 15;
486  params.RB_stop_Nmax = 40;
487 
488  detailed_data = rb_detailed_prep(params);
489 
490  case {'RB_uniform_refined_2_2_r1',...
491  'RB_uniform_refined_2_2_r5'}
492 
493  params.RB_stop_Nmax = 130;
494  rpos = findstr('r',compute_RB_methods{meth});
495  rvalue = str2num(compute_RB_methods{meth}(rpos(end)+1:end));
496  disp(['extracted r value = ',num2str(rvalue)]);
497 
498  params.RB_generation_mode = 'refined';
499  params.RB_refinement_mode = 'uniform';
500  params.RB_numintervals = [2,2];
501  % params.RB_stop_max_val_train_ratio = 1.2;
502  params.RB_stop_max_val_train_ratio = rvalue;
503  params.RB_M_val_size = 10;
504  params.RB_val_rand_seed = 2345;
505  params.RB_max_refinement_level = 15;
506 
507  detailed_data = rb_detailed_prep(params);
508 
509  case 'RB_uniform_refined_3_3'
510  %% 4. uniform refined method
511 
512  params.RB_stop_Nmax = 130;
513  params.RB_generation_mode = 'refined';
514  params.RB_refinement_mode = 'uniform';
515  params.RB_numintervals = [2,2];
516 % params.RB_stop_max_val_train_ratio = 1.2;
517  params.RB_stop_max_val_train_ratio = 1.2;
518  params.RB_M_val_size = 10;
519  params.RB_val_rand_seed = 2345;
520  params.RB_max_refinement_level = 15;
521 
522  detailed_data = rb_detailed_prep(params);
523 
524  % ------------------------------------- --------------------------
525  % ------------------- 3D Parameterspace --------------------------
526  % ------------------------------------- --------------------------
527 
528 
529  case {'RB_uniform_fixed_p3_27', ...
530  'RB_uniform_fixed_p3_64', ...
531  'RB_uniform_fixed_p3_125'}
532 
533 
534  % set rb-parameter information: 3d
535  params.mu_names = {'c_init','beta','k'};
536  params.mu_ranges = {[0,1],[0 1],[0 5e-8]};
537  params.RB_stop_Nmax = 150;
538 
539  rpos = findstr('_',compute_RB_methods{meth});
540  ntrain = str2num(compute_RB_methods{meth}(rpos(end)+1:end));
541  numintervals = round(ntrain^(1/3))-1;
542  disp(['extracted numintervals value = ',num2str(numintervals)]);
543 
544  %params.RB_extension_stop = 'epsilon';
545  params.RB_generation_mode = 'uniform_fixed'
546  params.RB_numintervals = ones(1,3) * numintervals;
547  detailed_data = rb_detailed_prep(params);
548 
549  case {'RB_uniform_fixed_p3_216_notimeout'}
550 
551  % set rb-parameter information: 3d
552  params.mu_names = {'c_init','beta','k'};
553  params.mu_ranges = {[0,1],[0 1],[0 5e-8]};
554  params.RB_stop_Nmax = 150;
555  params.RB_stop_timeout = inf;
556 
557  rpos = findstr('_',compute_RB_methods{meth});
558  tpos = findstr('notimeout',compute_RB_methods{meth});
559 
560  ntrain = str2num(compute_RB_methods{meth}(rpos(end-1)+1:tpos(end)-2));
561  numintervals = round(ntrain^(1/3))-1;
562  disp(['extracted numintervals value = ',num2str(numintervals)]);
563 
564  %params.RB_extension_stop = 'epsilon';
565  params.RB_generation_mode = 'uniform_fixed'
566  params.RB_numintervals = ones(1,3) * numintervals;
567  detailed_data = rb_detailed_prep(params);
568 
569  case { ...
570  'RB_adaptive_refined_p3_i2_r1_smax1000_theta5e-2',...
571  'RB_adaptive_refined_p3_i3_r1_smax1000_theta5e-2',...
572  'RB_adaptive_refined_p3_i3_r1_smax1000_theta5e-2_notimeout'...
573  };
574 
575  params.mu_names = {'c_init','beta','k'};
576  params.mu_ranges = {[0,1],[0 1],[0 5e-8]};
577  params.RB_stop_Nmax = 150;
578 
579  ipos = findstr('_i',compute_RB_methods{meth});
580  smaxpos = findstr('smax',compute_RB_methods{meth});
581  rpos = findstr('r',compute_RB_methods{meth});
582  thetapos = findstr('theta',compute_RB_methods{meth});
583  tpos = findstr('notimeout',compute_RB_methods{meth});
584  ivalue = str2num(compute_RB_methods{meth}(ipos(end)+2:rpos(end)-2));
585  disp(['extracted ivalue = ',num2str(ivalue)]);
586  rvalue = str2num(compute_RB_methods{meth}(rpos(end)+1:smaxpos(end)-2));
587  disp(['extracted rvalue = ',num2str(rvalue)]);
588  smax = str2num(compute_RB_methods{meth}(smaxpos(end)+4:thetapos(end)-2));
589  disp(['extracted smax value = ',num2str(smax)]);
590  if isempty(tpos)
591  theta = str2num(compute_RB_methods{meth}(thetapos(end)+5:end));
592  else
593  theta = str2num(compute_RB_methods{meth}(thetapos(end)+5:tpos(end)-2));
594  params.RB_stop_timeout = inf;
595  end;
596  disp(['extracted theta value = ',num2str(theta)]);
597 
598  params.RB_generation_mode = 'refined';
599  params.RB_refinement_mode = 'adaptive';
600  params.RB_element_indicator_mode = 'nodes_cogs_skippedrefs';
601  params.RB_element_indicator_s_max = smax;
602 
603  params.RB_numintervals = ones(1,3)*ivalue;
604  %params.RB_extension_stop = 'epsilon_or_pe_ratio';
605  %params.epsilon = 5e-5;
606  %params.epsilon = 1e-3;
607  % params.RB_stop_max_val_train_ratio = 1.2;
608  params.RB_stop_max_val_train_ratio = rvalue;
609  params.RB_M_val_size = 10;
610  params.RB_val_rand_seed = 2345;
611  params.RB_refinement_theta = theta;
612  params.RB_max_refinement_level = 15;
613 
614  detailed_data = rb_detailed_prep(params);
615 
616  case {...
617  'RB_uniform_refined_p3_i2_r1',...
618  'RB_uniform_refined_p3_i3_r1',...
619  'RB_uniform_refined_p3_i2_r1_notimeout',...
620  'RB_uniform_refined_p3_i3_r1_notimeout'...
621  }
622 
623  params.mu_names = {'c_init','beta','k'};
624  params.mu_ranges = {[0,1],[0 1],[0 5e-8]};
625  params.RB_stop_Nmax = 150;
626 
627  ipos = findstr('_i',compute_RB_methods{meth});
628  rpos = findstr('r',compute_RB_methods{meth});
629  tpos = findstr('notimeout',compute_RB_methods{meth});
630  ivalue = str2num(compute_RB_methods{meth}(ipos(end)+2:rpos(end)-2));
631  disp(['extracted ivalue = ',num2str(ivalue)]);
632  if isempty(tpos)
633  rvalue = str2num(compute_RB_methods{meth}(rpos(end)+1:end));
634  else
635  rvalue = str2num(compute_RB_methods{meth}(rpos(end)+1:tpos(end)-2));
636  params.RB_stop_timeout = inf;
637  end;
638 
639  disp(['extracted r value = ',num2str(rvalue)]);
640 
641  params.RB_generation_mode = 'refined';
642  params.RB_refinement_mode = 'uniform';
643  params.RB_numintervals = ones(1,3)*ivalue;
644  % params.RB_stop_max_val_train_ratio = 1.2;
645  params.RB_stop_max_val_train_ratio = rvalue;
646  params.RB_M_val_size = 10;
647  params.RB_val_rand_seed = 2345;
648  params.RB_max_refinement_level = 15;
649 
650  detailed_data = rb_detailed_prep(params);
651 
652  otherwiseh
653  error('basis-extension method unknown!');
654 
655  end;
656 
657  save(fullfile(basisgen_savepath,compute_RB_methods{meth}),...
658  'detailed_data','params');
659 
660 end; % loop RB-generation methods
661 
662 %%% Test: Assuming test data to be out of the synchronize directory
663 %called data/test_data
664 
665 if ~isempty(test_RB_methods)
666  % generate random parameter vectors data
667 
668  for meth = 1:length(test_RB_methods)
669 
670  fn = fullfile(basisgen_savepath,test_RB_methods{meth});
671  load(fn);
672 
673  % params = orgparams;
674  grid = construct_grid(params);
675 
676  rand('state',1111);
677  M = rand_uniform(params.RB_test_size, params.mu_ranges);
678 
679  if ismember(test_RB_indicators,'error');
680  save_detailed_simulations(M, params.RB_detailed_test_savepath, ...
681  grid, params);
682  end;
683  % extract final slices for faster test
684  %save_detailed_simulation_finals(params.test_path);
685 
686  % assuming, that at least stat and RB is contained!!
687  % [stat_test] = rb_test_basis(RB, stat,params);
688  % params.test_path = fullfile(rbmatlabhome,'tmpdata','test_data_10');
689 
690  tmpparams = params;
691  tmpparams.test_N_samples = 10;
692  detailed_data.RB_info.M_test = M;
693 
694  if ismember(test_RB_indicators,'error');
695  tmpparams.RB_error_indicator = 'error';
696  disp(['testing ', fn,' by assessing true errors']);
697  [maxerr, max_mu, minerr, min_mu] = ...
698  rb_test_convergence(detailed_data,tmpparams);
699 
700  detailed_data.RB_info.max_test_error_sequence = maxerr;
701  detailed_data.RB_info.min_test_error_sequence = minerr;
702  end;
703 
704  if ismember(test_RB_indicators,'estimator');
705  tmpparams.RB_error_indicator = 'estimator';
706  disp(['testing ', fn,' by assessing posterior-estimators']);
707  [maxerr, max_mu, minerr,min_mu] = ...
708  rb_test_convergence(detailed_data,tmpparams);
709 
710  detailed_data.RB_info.max_test_estimator_sequence = maxerr;
711  detailed_data.RB_info.min_test_estimator_sequence = minerr;
712  end;
713 
714  save([fn,'_tested'],'detailed_data','params');
715  end;
716 
717 end; % end test loop
718 
719 
720 % TO BE ADJUSTED TO NEW SYNTAX
721 %| \docupdate
Test reduced basis implementation.
Definition: DetailedData.m:1
function save_detailed_simulations(model, model_data, M, savepath)
perform loop over detailed simulations and save results or check consistency with existing saved resu...
function [ max_test_errs , max_mu_index , min_test_errs , min_mu_index ] = rb_test_convergence(detailed_data, model)
rb_test_convergence(detailed_data,model)