1 function gen_and_test_basis(compute_RB_methods,test_RB_methods)
2 %
function gen_and_test_basis(compute_RB_methods,test_RB_methods)
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'.
10 % Bernard Haasdonk 9.6.2007
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!');
20 % select here, which methods of the ones below are to be called
23 %compute_RB_methods = {}
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',...
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',...
49 %compute_RB_methods = {...
50 %
'RB_adaptive_refined_2_2_r1_smax1000',...
51 %
'RB_adaptive_refined_2_2_r1_smax100'}; %,...
53 %
'RB_adaptive_refined_2_2_r1_smax10',...
54 %
'RB_adaptive_refined_2_2_r1_smax5',...
55 %
'RB_adaptive_refined_2_2_r1_smax1'};
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' ...
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' ...
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'};
87 %compute_RB_methods = {};
89 % select here, which methods of the ones below are to be called
92 %test_RB_methods = compute_RB_methods;
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',...
111 %test_RB_indicators = {}; % none
112 %test_RB_indicators = {
'error',
'estimator'};
113 test_RB_indicators = {
'estimator'}; % only estimators
115 % set initial parameters
116 %orgparams = basisgen_init_params;
118 disp(
'1. setting common parameters.');
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
129 % set upper boundary to dirichlet, middle of upper and the lower boundary
131 % left set to dirichlet, right set to outflow
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)
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)
146 params.bnd_rect_corner2 = params.bnd_rect_corner2' + eps;
148 params.bnd_rect_index = [-1, -2, -2 , -1, -2 ...
150 %params.name_dirichlet_values =
'homogeneous';
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;
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];
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, ...
173 params.dir_box_yrange = {[params.yrange(2)-eps, params.yrange(2)+eps], ...
174 [params.yrange(2)-eps, params.yrange(2)+eps] ...
176 params.c_dir = 1.0; % maximum value
177 params.beta = 0.0; % weighting parameter: 1=box1, 0 = box2
179 params.name_neuman_values =
'rightflow';
180 %params.name_neuman_values =
'zero';
181 %params.name_neuman_values =
'homogeneous';
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
194 %params.name_flux =
'gdl_pgrad_and_parabola';
195 %params.v_in_max = 0.0; % maximum inflow velocity 0 to 1 is OK
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
204 %in
case of later matrix generation: downscale original velocities
205 %params.divclean_downscale = 1;
206 %params.divclean_downscale_quota = 0.04;
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'];
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
219 %params.name_init_values =
'homogeneous';
220 %params.c_init = 0.0;
222 params.name_init_values =
'wave';
223 params.freq_x = 5*2*pi/1000e-6;
227 %params.name_init_values =
'homogeneous';
228 %params.c_init = 0.3;
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;
236 params.verbose = 10; % 0 : no output,
237 % >9 : informative output
238 % >19 : verbose informative output
240 % >99 : desperate debug output, with dbstops
241 params.show_colorbar = 1;
242 params.colorbar_mode =
'EastOutside';
244 % generate cartesian grid
245 params.gridtype =
'rectgrid';
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';
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]};
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
274 % target accuracy epsilon:
276 params.RB_stop_epsilon = 1e-9; % 0.003 is already realized by init data!!
277 %params.stop_on_val_train_ratio = 0;
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
284 params.RB_detailed_test_savepath =
'test_data_100';
285 params.RB_test_size = 1000;
287 params.rb_problem_type =
'lin_evol';
289 % --------------------------------------------------------------------------
291 % store original params
295 for meth = 1:length(compute_RB_methods)
297 disp('--------------------------------------------------------------')
298 disp(['starting basis construction for ',compute_RB_methods{meth}]);
299 disp(
'clearing cache for fair time comparisons')
301 % reload params, such that independent of order of loop
304 switch compute_RB_methods{meth}
306 % ------------------------------------- --------------------------
307 % ------------------- 2D Parameterspace --------------------------
308 % ------------------------------------- --------------------------
310 case {
'RB_random_fixed_16', ...
311 'RB_random_fixed_64', ...
312 'RB_random_fixed_256', ...
313 'RB_random_fixed_1024'}
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)]);
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);
325 case {
'RB_uniform_fixed_16', ...
326 'RB_uniform_fixed_64', ...
327 'RB_uniform_fixed_256', ...
328 'RB_uniform_fixed_1024'}
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)]);
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);
341 case 'RB_adaptive_refined_3_3'%% 3. adaptive refined method:
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;
358 detailed_data = rb_detailed_prep(params);
360 case 'RB_adaptive_refined_2_2'%% 3. adaptive refined method:
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;
377 detailed_data = rb_detailed_prep(params);
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:
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)]);
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;
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;
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'};
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)]);
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;
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;
433 detailed_data = rb_detailed_prep(params);
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'}
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)]);
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;
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;
467 detailed_data = rb_detailed_prep(params);
470 case 'RB_adaptive_refined_3_3_Nmax40'
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;
488 detailed_data = rb_detailed_prep(params);
490 case {
'RB_uniform_refined_2_2_r1',...
491 'RB_uniform_refined_2_2_r5'}
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)]);
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;
507 detailed_data = rb_detailed_prep(params);
509 case 'RB_uniform_refined_3_3'
510 %% 4. uniform refined method
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;
522 detailed_data = rb_detailed_prep(params);
524 % ------------------------------------- --------------------------
525 % ------------------- 3D Parameterspace --------------------------
526 % ------------------------------------- --------------------------
529 case {
'RB_uniform_fixed_p3_27', ...
530 'RB_uniform_fixed_p3_64', ...
531 'RB_uniform_fixed_p3_125'}
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;
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)]);
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);
549 case {
'RB_uniform_fixed_p3_216_notimeout'}
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;
557 rpos = findstr(
'_',compute_RB_methods{meth});
558 tpos = findstr(
'notimeout',compute_RB_methods{meth});
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)]);
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);
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'...
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;
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)]);
591 theta = str2num(compute_RB_methods{meth}(thetapos(end)+5:end));
593 theta = str2num(compute_RB_methods{meth}(thetapos(end)+5:tpos(end)-2));
594 params.RB_stop_timeout = inf;
596 disp([
'extracted theta value = ',num2str(theta)]);
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;
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;
614 detailed_data = rb_detailed_prep(params);
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'...
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;
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)]);
633 rvalue = str2num(compute_RB_methods{meth}(rpos(end)+1:end));
635 rvalue = str2num(compute_RB_methods{meth}(rpos(end)+1:tpos(end)-2));
636 params.RB_stop_timeout = inf;
639 disp([
'extracted r value = ',num2str(rvalue)]);
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;
650 detailed_data = rb_detailed_prep(params);
653 error(
'basis-extension method unknown!');
657 save(fullfile(basisgen_savepath,compute_RB_methods{meth}),...
658 'detailed_data',
'params');
660 end; % loop RB-generation methods
662 %%%
Test: Assuming test data to be out of the synchronize directory
663 %called data/test_data
665 if ~isempty(test_RB_methods)
666 % generate random parameter vectors data
668 for meth = 1:length(test_RB_methods)
670 fn = fullfile(basisgen_savepath,test_RB_methods{meth});
673 % params = orgparams;
674 grid = construct_grid(params);
677 M = rand_uniform(params.RB_test_size, params.mu_ranges);
679 if ismember(test_RB_indicators,
'error');
683 % extract
final slices
for faster test
684 %save_detailed_simulation_finals(params.test_path);
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');
691 tmpparams.test_N_samples = 10;
692 detailed_data.RB_info.M_test = M;
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] = ...
700 detailed_data.RB_info.max_test_error_sequence = maxerr;
701 detailed_data.RB_info.min_test_error_sequence = minerr;
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] = ...
710 detailed_data.RB_info.max_test_estimator_sequence = maxerr;
711 detailed_data.RB_info.min_test_estimator_sequence = minerr;
714 save([fn,
'_tested'],
'detailed_data',
'params');
720 % TO BE ADJUSTED TO NEW SYNTAX
Test reduced basis implementation.
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)