1 function t_part_script(step,eps,Nmax)
2 %
function t_part_script(step)
4 %script testing t-partition
function with the linear advection problem
6 % step 1: testing fixed t-partition detailed simulations
7 % step 2: reduced simulation in t-partition mit selbstgebastelter RB
8 % step 3: generate t-partition RB with a fixed t-partition
9 % sollte immer gesetzt sein: t_model.t_part_rb_generation_cut_error = 1
10 % evtl. Fragen am Telefon klären :-)
11 % step 4:
Test: genauigkeitsvergleich zwischen t-partition und normal
12 % ist aber obsolet und funktioniert auch nicht mehr
13 % step 5: Vergleich ohne t-partition und mit
14 % Basen mit und ohne t-partition werden geladen und reduzierte
15 % Simulationen durchgeführt. Dann Vergleich der Fehlerverläufe.
16 % step 6: Basisgenerierung mit adaptiver t-partitionszerlegung
18 % Markus Dihlmann 11.02.11
28 params.coarse_factor = 4;
30 model = advection_fv_output_model(params);
31 model = set_mu(model, mu);
32 %model.save_time_indices = 0:model.nt;
33 model_data1 = gen_model_data(model);
35 sim_data1 = detailed_simulation(model, model_data1);
37 plot_params.plot_function = @plot_element_data;
38 plot_data_sequence(model, model_data1.grid, sim_data1.U, plot_params);
39 title(
'original solution')
43 %t_part_range{1} = [0,floor(model.nt/3)];
44 %t_part_range{2} = [floor(model.nt/3),floor(2*model.nt/3)];
45 %t_part_range{3} = [floor(2*model.nt/3),model.nt];
46 t_part_range{1} = [0,floor(model.nt/2)];
47 t_part_range{2} = [floor(model.nt/2),model.nt];
49 t_params.t_part_range= t_part_range;
51 model = t_part_model(model,t_params);
52 model = set_mu(model,mu);
53 model_data = gen_model_data(model);
55 %detailed_simulation
for whole t-domain
56 sim_data_all = detailed_simulation(model, model_data);
57 plot_data_sequence(model, model_data.grid, sim_data_all.U, plot_params);
58 title(
't-part whole traject.')
65 %detailed_simulation for domain 2
66 model.t_part_for_simulation=2;
67 sim_data = detailed_simulation(model, model_data);
68 plot_data_sequence(model, model_data.grid, sim_data.U, plot_params);
70 %U_end1=U1(:,floor(2*model.nt/3));
71 %U_end2=sim_data.U(:,end);
73 %err =
fv_l2_error(U_end1,U_end2,model_data1.grid,[]);
81 load('detailed_data_coarse4_30_adapt.mat');
84 params.coarse_factor = 4;
86 model = advection_fv_output_model(params);
87 model_data = gen_model_data(model);
88 reduced_data = gen_reduced_data(model, detailed_data);
90 rb_sim_data1 = rb_simulation(model, reduced_data);
91 rb_sim_data1 = rb_reconstruction(model, detailed_data, rb_sim_data1);
95 model.rb_simulation = @lin_evol_rb_simulation_t_part;
96 t_model = t_part_model(model);
97 model_data = gen_model_data(t_model);
99 %construct detailed_data
100 t_part_detailed_data{1}=detailed_data;
102 detailed_data.t_part_detailed_data = t_part_detailed_data;
105 t_reduced_data = gen_reduced_data(t_model, detailed_data);
106 rb_sim_data2 = rb_simulation(t_model, t_reduced_data);
107 rb_sim_data2 = rb_reconstruction(t_model, detailed_data, rb_sim_data2);
110 error =
fv_l2_error(rb_sim_data1.U, rb_sim_data2.U, model_data.W);
114 %-->two partitions with same RB
115 detailed_data.t_part_detailed_data{2} = detailed_data.t_part_detailed_data{1};
116 detailed_data.W = model_data.W;
117 detailed_data.grid = model_data.grid;
118 t_part_range{1} = [0,floor(model.nt/2)];
119 t_part_range{2} = [floor(model.nt/2),model.nt];
120 %t_part_range{3} = [floor(2*model.nt/3),model.nt];
121 t_params.t_part_range= t_part_range;
122 t_params.transition_model =1;
124 t_model = t_part_model(model,t_params);
125 model_data = gen_model_data(t_model);
126 reduced_data = gen_reduced_data(t_model, detailed_data);
128 rb_sim_data3 = rb_simulation(t_model, reduced_data);
129 rb_sim_data3 = rb_reconstruction(t_model, detailed_data, rb_sim_data3);
131 error =
fv_l2_error(rb_sim_data1.U, rb_sim_data3.U, model_data.W);
139 %generate t-part reduced basis for fixed t-partition
140 %%%%%%%%%%%%%%%%%%%%%%%%%%5
144 params.coarse_factor = 4;
145 model = advection_fv_output_model(params);
147 model.random_seed=1234;
148 model.RB_numintervals = [2];
149 model.RB_generation_mode = 'greedy_refined';%'greedy_uniform_fixed'; %
150 model.RB_refinement_mode = 'adaptive';
151 model.RB_error_indicator = 'estimator';%'error';%'estimator';
152 model.RB_detailed_train_savepath = fullfile(RBMATLABTEMP,'dump');
153 model.RB_extension_algorithm = @RB_extension_PCA_fixspace;
154 model.RB_stop_epsilon = 1e-2;%1e-1;
155 model.RB_stop_timeout = 24*60*60; % 1 minute
156 model.RB_stop_Nmax = 30;
157 model.RB_stop_max_val_train_ratio = 1;
158 model.RB_refinement_theta = 0.2;
159 model.RB_val_rand_seed = 543;
160 model.RB_M_val_size = 10;
161 model.RB_stop_max_refinement_level = 5;
162 model.RB_element_indicator_mode='nodes_cogs_skippedrefs';
163 model.RB_element_indicator_s_max = 1;
166 %rb_simulation without t-partition basis
167 model_data = gen_model_data(model);
168 detailed_data = gen_detailed_data(model, model_data);
169 %reduced_data = gen_reduced_data(model, detailed_data);
170 %sim_data = rb_simulation(model, reduced_data);
171 %sim_data_original = rb_reconstruction(model, detailed_data, sim_data);
173 save('Greedybase_1p_30_coarse4_adapt.mat','detailed_data');
175 model.rb_simulation = @lin_evol_rb_simulation_t_part;
177 %t_part_range{1} = [0,floor(model.nt/2)];
178 %t_part_range{2} = [floor(model.nt/2),model.nt];
179 t_part_range{1} = [0,floor(model.nt/3)];
180 t_part_range{2} = [floor(model.nt/3),floor(2*model.nt/3)];
181 t_part_range{3} = [floor(2*model.nt/3),model.nt];
182 t_params.t_part_range= t_part_range;
183 %generate t-partition model
184 t_model = t_part_model(model,t_params);
185 t_model.basis_vector_overlap = 5; %Wieviele Basisvektoren aus der alten basis werden als initial Basis für die nächste Partition verwendet
187 model_data = gen_model_data(t_model);
189 %generate detailed_data without error cut
190 %t_model.t_part_rb_generation_cut_error = 0;
191 %detailed_data = gen_detailed_data(t_model, model_data);
194 %reduced_data = gen_reduced_data(t_model, detailed_data);
195 %sim_data = rb_simulation(t_model, reduced_data);
196 %sim_data = rb_reconstruction(t_model, detailed_data, sim_data);
198 %save(
'Greedybase_50_t_part_coarse4_222.mat',
'detailed_data');
201 %generate detailed_data with error cut
202 t_model.t_part_rb_generation_cut_error = 1;
203 detailed_data = gen_detailed_data(t_model, model_data);
206 %reduced_data = gen_reduced_data(t_model, detailed_data);
207 %sim_data2 = rb_simulation(t_model, reduced_data);
208 %sim_data2 = rb_reconstruction(t_model, detailed_data, sim_data2);
209 save(
'compare_proj_Greedybase_30_t_part_3parts_coarse4_adapt_cutoff_PODinit.mat',
'detailed_data');
216 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
217 %
Test: wieviele Basisvektoren werden benötigt um eine bestimme
218 % Genauigkeit zu erreichen?
219 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
221 load(
'Greedybase_30_coarse4_222.mat')
224 params.coarse_factor = 4;
225 model = advection_fv_output_model(params);
226 model.random_seed = 1234;
228 model_data = gen_model_data(model);
230 reduced_data= gen_reduced_data(model, detailed_data);
233 %loop over number of basis vectors
235 av_error=zeros(1,size(N,2));
236 error_max=zeros(1,size(N,2));
237 rb_sim_av_time = zeros(1,size(N,2));
240 %reduced_data.N=N(i);
241 disp(['Caculating error with ',num2str(N(i)),' basis vectors']);
243 reduced_data_sub = model.reduced_data_subset(model, reduced_data);
245 [av_error(i), error_max(i), rb_sim_av_time(i), std_dev]=calculate_test_estimator(model, reduced_data_sub);
249 %----------------T-part model simulations-----------------
250 model.rb_simulation = @lin_evol_rb_simulation_t_part;
252 %t_part_range{1} = [0,floor(model.nt/2)];
253 %t_part_range{2} = [floor(model.nt/2),model.nt];
254 t_part_range{1} = [0,floor(model.nt/3)];
255 t_part_range{2} = [floor(model.nt/3),floor(2*model.nt/3)];
256 t_part_range{3} = [floor(2*model.nt/3),model.nt];
257 t_params.t_part_range= t_part_range;
258 %generate t-partition model
259 t_model = t_part_model(model,t_params);
260 model_data = gen_model_data(t_model);
262 %generate detailed_data without error cut
263 t_model.t_part_rb_generation_cut_error = 0;
264 load(
'Greedybase_30_t_part_3parts_coarse4_222_cutoff.mat')
265 t_reduced_data = gen_reduced_data(t_model, detailed_data);
267 av_error_t_part=zeros(1,size(N,2));
268 error_max_t_part= zeros(1,size(N,2));
269 rb_sim_av_time_t_part = zeros(1,size(N,2));
274 %reduced_data.N=N(i);
275 disp(['Caculating error with ',num2str(N(i)),' basis vectors']);
277 t_reduced_data_sub = t_model.reduced_data_subset(t_model, t_reduced_data);
279 [av_error_t_part(i), error_max_t_part(i), rb_sim_av_time_t_part(i), std_dev]=calculate_test_estimator(t_model, t_reduced_data_sub);
286 plot(N,error_max,'b-.')
287 plot(N,av_error_t_part,'r');
288 plot(N,error_max_t_part,'r-.')
289 title('Errors over number of basisvectors')
290 legend('average error','maximal error','t-part av error','t_part max error')
295 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
296 % einfach mal eine simulation anschauen und vergleichen
297 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
300 %ursprüngliches modell laden und generieren
301 load('Greedybase_1p_coarse4_adapt_0.001.mat')
303 params.coarse_factor = 4;
304 model = advection_fv_output_model(params);
305 model_data = gen_model_data(model);
306 model = set_mu(model, [0.712]);
307 reduced_data = gen_reduced_data(model, detailed_data);
310 sim_data_det = detailed_simulation(model, model_data);
312 disp(['Simulationen für ',num2str(get_mu(model)')]);
313 sim_data = rb_simulation(model, reduced_data);
314 sim_data = rb_reconstruction(model, detailed_data, sim_data);
317 %t-model laden und simulieren
318 load('Greedybase_adaptive_1p_t_part_coarse4_adapt_cutoff_eps0.001_N50.mat');
320 model.rb_simulation = @lin_evol_rb_simulation_t_part;
322 if isfield(detailed_data,'t_part_range')
323 t_part_range = detailed_data.t_part_range;
325 %t_part_range{1} = [0,floor(model.nt/2)];
326 %t_part_range{2} = [floor(model.nt/2),model.nt];
327 t_part_range{1} = [0,floor(model.nt/3)];
328 t_part_range{2} = [floor(model.nt/3),floor(2*model.nt/3)];
329 t_part_range{3} = [floor(2*model.nt/3),model.nt];
331 t_params.t_part_range= t_part_range;
332 t_params.transition_model = 0;
333 %generate t-partition model
334 t_model = t_part_model(model,t_params);
337 t_reduced_data = gen_reduced_data(t_model, detailed_data);
338 disp([
'Simulationen für ',num2str(get_mu(t_model)
')]);
339 sim_data_t = rb_simulation(t_model, t_reduced_data);
340 sim_data_t = rb_reconstruction(t_model, detailed_data,sim_data_t);
342 %calculate real error
343 err = fv_l2_error(sim_data.U(:,model.save_time_indices+1), sim_data_det.U, model_data.grid,[]);
344 err_t = fv_l2_error(sim_data_t.U(:,model.save_time_indices+1), sim_data_det.U, model_data.grid,[]);
350 plot(sim_data_t.Delta,'r
')
354 legend('Error estimator normal model
','Error estimator t-part model
', 'real error normal model
', 'real error t-part model
')
356 plot_params.plot_function = @plot_element_data;
357 plot_data_sequence(model, model_data.grid,sim_data.U,plot_params)
358 title('original solution
')
360 plot_data_sequence(t_model, model_data.grid,sim_data_t.U,plot_params)
361 title('t-part_model
')
370 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
371 % adaptive basis generation
372 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
374 if nargin<2||isempty(eps)
378 if nargin<3||isempty(Nmax)
382 params.coarse_factor = 4;
383 model = advection_fv_output_model(params);
385 model.random_seed = 1234;
386 model.RB_numintervals = [2];
387 model.RB_stop_epsilon = eps;%1e-1;
388 model.RB_stop_Nmax = Nmax;
389 model.RB_refinement_mode = 'adaptive
';
390 model.RB_error_indicator = 'estimator
';%'error
';%'estimator
';
391 model.RB_detailed_train_savepath = fullfile(rbmatlabtemp,'dump
');
392 model.RB_extension_algorithm = @RB_extension_PCA_fixspace;
393 model.RB_stop_epsilon = eps;%1e-1;
394 model.RB_stop_timeout = 24*60*60; %
395 model.RB_stop_max_val_train_ratio = 1;
396 model.RB_refinement_theta = 0.2;
397 model.RB_val_rand_seed = 543;
398 model.RB_M_val_size = 10;
399 model.RB_stop_max_refinement_level = 100;
400 model.RB_element_indicator_mode='nodes_cogs_skippedrefs
';
401 model.RB_element_indicator_s_max = 1;
403 model_data = gen_model_data(model);
406 model.rb_simulation = @lin_evol_rb_simulation_t_part;
409 %t_part_range{1} = [0,floor(model.nt/2)];
410 %t_part_range{2} = [floor(model.nt/2),model.nt];
411 %t_params.t_part_range= t_part_range;
412 %generate t-partition model
413 t_model = t_part_model(model,t_params);
416 t_model.t_part_rb_generation_mode ='adaptive_error_restriction
';
417 t_model.t_part_rb_generation_cut_error = 1;
418 t_model.max_t_part_refinement_level = 5; %fix maximum refinement level
419 %t_model.RB_stop_max_val_train_ratio = 1;
420 %middle point bisection!!!!!!!!!!!!!!!!!
421 %t_model.t_part_middle_point_bisection=1;
422 %!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
425 detailed_data = gen_detailed_data(t_model, model_data);
426 detailed_data.total_elapsed_time = toc(tstart);
429 %reduced_data = gen_reduced_data(t_model, detailed_data);
430 %sim_data2 = rb_simulation(t_model, reduced_data);
431 %sim_data2 = rb_reconstruction(t_model, detailed_data, sim_data2);
432 %save(['Greedybase_adaptive_1p_t_part_coarse4_adapt_cutoff_eps
',num2str(eps),'_N
',num2str(Nmax),'.mat
'],'detailed_data
');
433 save(fullfile(rbmatlabresult,['Greedybase_adaptive_1p_t_part_coarse
',num2str(params.coarse_factor), '_adapt_cutoff_eps
',num2str(eps),'_N
',num2str(Nmax),'.mat
']),'detailed_data
','t_model
');
434 %load(fullfile(rbmatlabresult,['Greedybase_adaptive_1p_t_part_coarse4_adapt_cutoff_eps
',num2str(eps),'_N
',num2str(Nmax),'.mat
']));%,'detailed_data
')
438 t_reduced_data = gen_reduced_data(t_model, detailed_data);
439 t_model.t_part_range = detailed_data.t_part_range;
441 [max_sim_data_t, rtimes] = get_max_sim_data(t_model, t_reduced_data);
443 max_sim_data_t.Delta = max_sim_data_t.t_part_sim_data{1}.Delta;
444 for p=2:length(max_sim_data_t.t_part_sim_data)
445 max_sim_data_t.Delta = [max_sim_data_t.Delta, max_sim_data_t.t_part_sim_data{p}.Delta(2:end)];
448 offline_time = detailed_data.total_elapsed_time;
450 columntitles = {'minslicesize
', 'offline_time
', 'noofslices
', 'averageN
', 'minN
' ,'maxN
', 'averagedtime
'};
452 values(1) = min(cellfun(@(X) X(2) - X(1), detailed_data.t_part_range, 'UniformOutput
', true));
453 values(2) = offline_time;
454 values(3) = length(detailed_data.t_part_range);
455 Nsizes = cellfun(@(X) size(X.RB,2), detailed_data.t_part_detailed_data);
456 values(4) = sum(Nsizes) / values(3);
457 values(5) = min(Nsizes);
458 values(6) = max(Nsizes);
459 values(7) = mean(rtimes);
460 save(fullfile(rbmatlabresult, 'data
'), 'max_sim_data_t
', 'values
', 'columntitles
', 'rtimes
');
461 print_datatable(fullfile(rbmatlabresult,'tableline
'),columntitles,values);
465 %generate normal reduced basis
466 %%%%%%%%%%%%%%%%%%%%%%%%%%5
470 params.coarse_factor = 4;
471 model = advection_fv_output_model(params);
472 model.rb_simulation = @lin_evol_rb_simulation_t_part;
474 model.random_seed=1234;
475 model.RB_numintervals = [2];
476 model.RB_generation_mode = 'greedy_refined
';%'greedy_uniform_fixed
'; %
477 model.RB_refinement_mode = 'adaptive
';
478 model.RB_error_indicator = 'estimator
';%'error
';%'estimator
';
479 model.RB_detailed_train_savepath = fullfile(RBMATLABTEMP,'dump
');
480 model.RB_extension_algorithm = @RB_extension_PCA_fixspace;
481 model.RB_stop_epsilon = eps;%1e-1;
482 model.RB_stop_timeout = 24*60*60; %
483 model.RB_stop_Nmax = 500;
484 model.RB_stop_max_val_train_ratio = 1;
485 model.RB_refinement_theta = 0.2;
486 model.RB_val_rand_seed = 543;
487 model.RB_M_val_size = 10;
488 model.RB_stop_max_refinement_level = 5;
489 model.RB_element_indicator_mode='nodes_cogs_skippedrefs
';
490 model.RB_element_indicator_s_max = 1;
493 %rb_simulation without t-partition basis
494 model_data = gen_model_data(model);
495 detailed_data = gen_detailed_data(model, model_data);
496 %reduced_data = gen_reduced_data(model, detailed_data);
497 %sim_data = rb_simulation(model, reduced_data);
498 %sim_data_original = rb_reconstruction(model, detailed_data, sim_data);
500 save(['Greedybase_1p_coarse4_adapt_
',num2str(eps),'.mat
'],'detailed_data
');
506 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
507 % generate the plot average sim time vs. epsilon_tol
508 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
510 %Part 1:loading and caclculating erro ans sim time data
512 %The bases should be saved as (example) :Greedybase_1p_coarse4_adapt_0.05.mat
514 %Greedybase_adaptive_1p_t_part_coarse4_adapt_cutoff_eps0.06_N30.mat
516 %be sure to be in the right directory
518 params.coarse_factor = 4;
519 model = advection_fv_output_model(params);
520 model.rb_simulation = @lin_evol_rb_simulation_t_part;
522 model_data = gen_model_data(model);
533 s_norm_base = 'Greedybase_1p_coarse4_adapt_
';
534 %go through all normal bases and calculate average error/max
537 if strncmp(s{i},s_norm_base,length(s_norm_base))
540 eps_tol = [eps_tol,str2double(s{i}(length(s_norm_base)+1:indx-1))];
542 N_normal = [N_normal,detailed_data.N];
543 reduced_data = gen_reduced_data(model, detailed_data);
545 [av_error_new, max_error_new, av_sim_time_new, std_dev]=calculate_test_estimator(model, reduced_data);
547 av_error = [av_error, av_error_new];
548 max_error = [max_error, max_error_new];
549 av_sim_time = [av_sim_time, av_sim_time_new];
553 av_error_normal = av_error;
554 eps_tol_normal = eps_tol;
555 max_error_normal = max_error;
556 av_sim_time_normal = av_sim_time;
559 %go through all t-part bases
567 s_norm_base = 'Greedybase_adaptive_middle_1p_t_part_coarse4_adapt_cutoff_eps
';
568 %s_norm_base = 'Greedybase_adaptive_1p_t_part_coarse4_adapt_cutoff_eps
';
569 %go through all normal bases and calculate average error/max
572 if strncmp(s{i},s_norm_base,length(s_norm_base))
574 indx=v(10);%indx=v(9);%not nice but works here!! Change when needed!!
577 eps_tol = [eps_tol,str2double(s{i}(length(s_norm_base)+1:indx-1))];
578 Nmax= [Nmax,str2double(s{i}(indx+2:indx_dot))];
580 %calculate average number of basis vectors
582 for j=1:length(detailed_data.t_part_detailed_data)
583 xsum=xsum+detailed_data.t_part_detailed_data{j}.N;
585 av_N = [av_N,xsum/length(detailed_data.t_part_detailed_data)];
587 t_params.t_part_range = detailed_data.t_part_range;
588 t_model = t_part_model(model, t_params);
589 reduced_data = gen_reduced_data(t_model, detailed_data);
591 [av_error_new, max_error_new, av_sim_time_new, std_dev]=calculate_test_estimator(t_model, reduced_data);
593 av_error = [av_error, av_error_new];
594 max_error = [max_error, max_error_new];
595 av_sim_time = [av_sim_time, av_sim_time_new];
599 av_error_t = av_error;
601 max_error_t = max_error;
602 av_sim_time_t = av_sim_time;
606 save('error_sim_time_data.mat
','av_error_t
','av_error_normal
','eps_tol_t
','eps_tol_normal
','max_error_normal
','max_error_t
','N_max_t
','av_sim_time_t
','av_sim_time_normal
');
610 %semilogy(max_error_normal,av_sim_time_normal,'x-
')
612 %semilogy(max_error_t,av_sim_time_t,'rx-
');
614 %ylabel('av_sim_time
')
615 %legend('normal
','t-part
')
618 [eps_tol_t,av_error_t,max_error_t,av_sim_time_t,N_max_t] = sort_low_to_high(eps_tol_t, ...
619 av_error_t,max_error_t,av_sim_time_t, N_max_t);
620 [eps_tol_normal,av_error_normal,max_error_normal,av_sim_time_normal] = sort_low_to_high(eps_tol_normal, ...
621 av_error_normal,max_error_normal,av_sim_time_normal, []);
624 %sort out for N_max settings
627 for i = 1:length(N_max_t)
628 %is this N_max already in N_look_up?
630 for j=1:length(N_look_up)
631 if N_look_up(j) == N_max_t(i)
637 pos=length(N_look_up);
638 N_look_up(pos+1) = N_max_t(i);
639 T_data{pos+1}.av_sim_time_t=av_sim_time_t(i);
640 T_data{pos+1}.max_error_t = max_error_t(i);
642 T_data{pos}.av_sim_time_t(end+1) = av_sim_time_t(i);
643 T_data{pos}.max_error_t(end+1) = max_error_t(i);
647 if length(N_look_up) ==1
649 semilogy(max_error_normal,av_sim_time_normal,'bx-
','LineWidth
',2);%,'Color
',[1,0.6,0])
651 semilogy(max_error_t,av_sim_time_t,'rx-
','LineWidth
',2);
652 title('Approximation error vs. average simulation time
')
653 xlabel('maximum estimated error
')
654 ylabel('average simulation time in sec.
')
655 legend('no T-partition
','adaptive T-partition Nmax40
')
656 set(gca,'ytick
',[0.5,0.55,0.575,0.6,0.65,0.7,0.75])
658 colorstyles={'rx-
','gx-
','mx-
','yx-
'};
659 legend_text={'normal reduced model
'};
661 semilogy(max_error_normal,av_sim_time_normal,'bx-
','LineWidth
',2);%,'Color
',[1,0.6,0])
663 title('Approximation error vs. average simulation time
')
665 ylabel('average simulation time
')
666 for i=1:length(N_look_up)
667 semilogy(T_data{i}.max_error_t,T_data{i}.av_sim_time_t,colorstyles{i},'LineWidth
',2);
668 legend_text{i+1}=num2str(N_look_up(i));
671 set(gca,'ytick
',[0.5,0.55,0.6,0.65,0.7,0.75])
678 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
679 % fixed partition maximal error plot
680 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
682 %ursprüngliches modell laden und generieren
683 load('Greedybase_1p_50_coarse4_adapt.mat
')
685 params.coarse_factor = 4;
686 model = advection_fv_output_model(params);
687 model.rb_simulation = @lin_evol_rb_simulation_t_part;
688 model_data = gen_model_data(model);
690 reduced_data = gen_reduced_data(model, detailed_data);
692 max_sim_data_normal = get_max_sim_data(model, reduced_data);
694 %t-model laden und simulieren
695 load('Greedybase_1p_50_t_part_3parts_coarse4_adapt_cutoff.mat
');
697 model.rb_simulation = @lin_evol_rb_simulation_t_part;
699 if isfield(detailed_data,'t_part_range
')
700 t_part_range = detailed_data.t_part_range;
702 %t_part_range{1} = [0,floor(model.nt/2)];
703 %t_part_range{2} = [floor(model.nt/2),model.nt];
704 t_part_range{1} = [0,floor(model.nt/3)];
705 t_part_range{2} = [floor(model.nt/3),floor(2*model.nt/3)];
706 t_part_range{3} = [floor(2*model.nt/3),model.nt];
708 t_params.t_part_range= t_part_range;
709 t_params.transition_model = 0;
710 %generate t-partition model
711 t_model = t_part_model(model,t_params);
714 t_reduced_data = gen_reduced_data(t_model, detailed_data);
716 max_sim_data_t = get_max_sim_data(t_model, t_reduced_data);
718 max_sim_data_t.Delta = max_sim_data_t.t_part_sim_data{1}.Delta;
719 for p=2:length(max_sim_data_t.t_part_sim_data)
720 max_sim_data_t.Delta = [max_sim_data_t.Delta, max_sim_data_t.t_part_sim_data{p}.Delta(2:end)];
724 plot(max_sim_data_normal.Delta,'LineWidth
',2)
726 plot(max_sim_data_t.Delta,'r
','LineWidth
',2)
728 ylabel('estimated maximal error
')
729 title('Evolution of maximal error of a validation set
')
730 legend('normal
','t-part
')
733 %plot partition borders
735 for p=1:length(t_model.t_part_range)
736 x_pos = t_model.t_part_range{p}(2);
738 plot([x_pos,x_pos],limy,'-.
','Color
',[1,0.6,0]);
741 legend('normal
','t-part
','interval-border
')
748 % generate reduced bases for time intervals of length 'granularity
'
749 %%%%%%%%%%%%%%%%%%%%%%%%%%5
751 if ~exist('eps
', 'var
') || isempty(eps)
755 if ~exist('Nmax
', 'var
') || isempty(Nmax)
760 params.coarse_factor = 8;
761 model = advection_fv_output_model(params);
762 model.rb_simulation = @lin_evol_rb_simulation_t_part;
764 model.random_seed = 1234;
765 model.RB_numintervals = [2];
766 model.RB_generation_mode = 'greedy_refined
';%'greedy_uniform_fixed
'; %
767 model.RB_refinement_mode = 'adaptive
';
768 model.RB_error_indicator = 'estimator
';%'error
';%'estimator
';
769 model.RB_detailed_train_savepath = fullfile(RBMATLABTEMP,'dump
');
770 model.RB_extension_algorithm = @RB_extension_PCA_fixspace;
771 model.RB_stop_epsilon = eps;%1e-1;
772 model.RB_stop_timeout = 24*60*60; % 24 stunden
773 model.RB_stop_Nmax = Nmax;
774 model.RB_stop_max_val_train_ratio = 1;
775 model.RB_refinement_theta = 0.2;
776 model.RB_val_rand_seed = 543;
777 model.RB_M_val_size = 10;
778 model.RB_stop_max_refinement_level = 5;
779 model.RB_element_indicator_mode = 'nodes_cogs_skippedrefs
';
780 model.RB_element_indicator_s_max = 1;
781 model.rb_simulation = @lin_evol_rb_simulation_t_part;
783 model_data = gen_model_data(model);
788 t_model = t_part_model(model,t_params);
790 t_model.t_part_rb_generation_mode ='fixed
';
794 t_model.t_part_range = cell(1,ceil(model.nt/granularity));
795 for i=1:length(t_model.t_part_range)-1
796 t_model.t_part_range{i} = [granularity*(i-1),granularity*i];
798 t_model.t_part_range{end} = [granularity*i,model.nt];
801 % t_part_range{1} = [0,4];%floor(model.nt/2)];
802 % t_part_range{2} = [4,8];%floor(model.nt/2),model.nt];
803 % t_model.t_part_range = t_part_range;
805 t_model.t_part_rb_generation_cut_error = 1;
808 detailed_data = gen_detailed_data(t_model, model_data);
810 detailed_data.total_elapsed_time = t;
811 infix = ['eps
', num2str(eps) , '_Nmax
', num2str(Nmax), '_coarse
', num2str(params.coarse_factor), '_gran
', num2str(granularity)];
812 save(fullfile(rbmatlabresult, ['Greedybase_
',infix]),'detailed_data
');
814 %rb_simulation without t-partition basis
815 % model_data = gen_model_data(model);
816 % detailed_data = gen_detailed_data(model, model_data);
817 %reduced_data = gen_reduced_data(model, detailed_data);
818 %sim_data = rb_simulation(model, reduced_data);
819 %sim_data_original = rb_reconstruction(model, detailed_data, sim_data);
821 t_reduced_data = gen_reduced_data(t_model, detailed_data);
823 [max_sim_data_t, rtimes] = get_max_sim_data(t_model, t_reduced_data);
825 max_sim_data_t.Delta = max_sim_data_t.t_part_sim_data{1}.Delta;
826 for p=2:length(max_sim_data_t.t_part_sim_data)
827 max_sim_data_t.Delta = [max_sim_data_t.Delta, max_sim_data_t.t_part_sim_data{p}.Delta(2:end)];
830 offline_time = detailed_data.total_elapsed_time;
832 columntitles = {'minslicesize
', 'offline_time
', 'noofslices
', 'averageN
', 'minN
' ,'maxN
', 'averagedtime
'};
834 values(1) = granularity;
835 values(2) = offline_time;
836 values(3) = length(t_model.t_part_range);
837 Nsizes = cellfun(@(X) size(X.RB,2), detailed_data.t_part_detailed_data);
838 values(4) = sum(Nsizes) / values(3);
839 values(5) = min(Nsizes);
840 values(6) = max(Nsizes);
841 values(7) = mean(rtimes);
842 save(fullfile(rbmatlabresult, ['data
',infix]), 'max_sim_data_t
', 'values
', 'columntitles
', 'rtimes
');
843 print_datatable(fullfile(rbmatlabresult,['tableline
',infix]),columntitles,values);
847 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
848 % adaptive basis generation with middelpoint bisection
849 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
851 if nargin<2||isempty(eps)
855 if nargin<3||isempty(Nmax)
859 params.coarse_factor = 4;
860 model = advection_fv_output_model(params);
862 model.random_seed = 1234;
863 model.RB_numintervals = [2];
864 model.RB_stop_epsilon = eps;%1e-1;
865 model.RB_stop_Nmax = Nmax;
866 model.RB_refinement_mode = 'adaptive
';
867 model.RB_error_indicator = 'estimator
';%'error
';%'estimator
';
868 model.RB_detailed_train_savepath = fullfile(rbmatlabtemp,'dump
');
869 model.RB_extension_algorithm = @RB_extension_PCA_fixspace;
870 model.RB_stop_epsilon = eps;%1e-1;
871 model.RB_stop_timeout = 24*60*60; %
872 model.RB_stop_max_val_train_ratio = 1;
873 model.RB_refinement_theta = 0.2;
874 model.RB_val_rand_seed = 543;
875 model.RB_M_val_size = 10;
876 model.RB_max_refinement_level = 50;
877 model.RB_element_indicator_mode='nodes_cogs_skippedrefs
';
878 model.RB_element_indicator_s_max = 1;
880 model_data = gen_model_data(model);
883 model.rb_simulation = @lin_evol_rb_simulation_t_part;
886 %t_part_range{1} = [0,floor(model.nt/2)];
887 %t_part_range{2} = [floor(model.nt/2),model.nt];
888 %t_params.t_part_range= t_part_range;
889 %generate t-partition model
890 t_model = t_part_model(model,t_params);
893 t_model.t_part_rb_generation_mode ='adaptive_error_restriction
';
894 t_model.t_part_rb_generation_cut_error = 1;
895 t_model.max_t_part_refinement_level = 5; %fix maximum refinement level
896 %t_model.RB_stop_max_val_train_ratio = 1;
897 %middle point bisection!!!!!!!!!!!!!!!!!
898 t_model.t_part_middle_point_bisection=1;
899 %!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
902 detailed_data = gen_detailed_data(t_model, model_data);
903 detailed_data.total_elapsed_time = toc(tstart);
906 %reduced_data = gen_reduced_data(t_model, detailed_data);
907 %sim_data2 = rb_simulation(t_model, reduced_data);
908 %sim_data2 = rb_reconstruction(t_model, detailed_data, sim_data2);
909 %save(['Greedybase_adaptive_1p_t_part_coarse4_adapt_cutoff_eps
',num2str(eps),'_N
',num2str(Nmax),'.mat
'],'detailed_data
');
910 save(fullfile(rbmatlabresult,['Greedybase_adaptive_middle_1p_t_part_coarse
',num2str(params.coarse_factor), '_adapt_cutoff_eps
',num2str(eps),'_N
',num2str(Nmax),'.mat
']),'detailed_data
','t_model
');
911 %load(fullfile(rbmatlabresult,['Greedybase_adaptive_1p_t_part_coarse4_adapt_cutoff_eps
',num2str(eps),'_N
',num2str(Nmax),'.mat
']));%,'detailed_data
')
915 t_reduced_data = gen_reduced_data(t_model, detailed_data);
916 t_model.t_part_range = detailed_data.t_part_range;
918 [max_sim_data_t, rtimes] = get_max_sim_data(t_model, t_reduced_data);
920 max_sim_data_t.Delta = max_sim_data_t.t_part_sim_data{1}.Delta;
921 for p=2:length(max_sim_data_t.t_part_sim_data)
922 max_sim_data_t.Delta = [max_sim_data_t.Delta, max_sim_data_t.t_part_sim_data{p}.Delta(2:end)];
925 offline_time = detailed_data.total_elapsed_time;
927 columntitles = {'minslicesize
', 'offline_time
', 'noofslices
', 'averageN
', 'minN
' ,'maxN
', 'averagedtime
'};
929 values(1) = min(cellfun(@(X) X(2) - X(1), detailed_data.t_part_range, 'UniformOutput
', true));
930 values(2) = offline_time;
931 values(3) = length(detailed_data.t_part_range);
932 Nsizes = cellfun(@(X) size(X.RB,2), detailed_data.t_part_detailed_data);
933 values(4) = sum(Nsizes) / values(3);
934 values(5) = min(Nsizes);
935 values(6) = max(Nsizes);
936 values(7) = mean(rtimes);
937 save(fullfile(rbmatlabresult, 'data
'), 'max_sim_data_t
', 'values
', 'columntitles
', 'rtimes
');
938 print_datatable(fullfile(rbmatlabresult,'tableline
'),columntitles,values);
942 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
943 % generate entire data and figure for average_sim_time vs.
945 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
947 %generate normal bases
948 t_part_script(7,0.1,40);
949 t_part_script(7,0.05,40);
950 t_part_script(7,0.03,40);
951 t_part_script(7,0.01,40);
952 t_part_script(7,0.007,40);
953 t_part_script(7,0.005,40);
954 t_part_script(7,0.003,40);
955 t_part_script(7,0.001,40);
956 t_part_script(11,0.1,40);
957 t_part_script(11,0.08,40);
958 t_part_script(11,0.05,40);
959 t_part_script(11,0.01,40);
960 t_part_script(11,0.008,40);
961 t_part_script(11,0.005,40);
962 t_part_script(11,0.003,40);
973 function [max_sim_data, rtimes] = get_max_sim_data(model, reduced_data)
974 rand('state
',model.random_seed);
975 M_val=rand_uniform(20, model.mu_ranges);
977 model = set_mu(model,M_val(:,1));
979 rtimes = zeros(1,100);
982 if isfield(model,'t_part_range
')
985 max_sim_data = rb_simulation(model, reduced_data);
987 if ~isfield(max_sim_data, 't_part_sim_data
')
988 max_sim_data.t_part_sim_data{1} = max_sim_data;
992 for i=1:size(M_val,2)
993 model = set_mu(model, M_val(:,i));
995 sim_data = rb_simulation(model, reduced_data);
999 if ~isfield(sim_data, 't_part_sim_data
')
1000 sim_data.t_part_sim_data{1} = sim_data;
1004 for p=1:length(sim_data.t_part_sim_data)
1005 for k=1:length(sim_data.t_part_sim_data{p}.Delta)
1006 if (max_sim_data.t_part_sim_data{p}.Delta(k)<sim_data.t_part_sim_data{p}.Delta(k))
1007 max_sim_data.t_part_sim_data{p}.Delta(k) = sim_data.t_part_sim_data{p}.Delta(k);
1014 if isfield(max_sim_data,'Delta
')
1015 max_sim_data = rmfield(max_sim_data,'Delta
');
1018 %test_error = rb_test_estimator(model, reduced_data,M_val);
1019 %[error_max,mu_ind] = max(test_error);
1021 %model = set_mu(model,M_val(:,mu_ind));
1022 %sim_data = rb_simulation(model, reduced_data);
1024 max_sim_data = rb_simulation(model, reduced_data);
1026 for i=1:size(M_val,2)
1027 model = set_mu(model, M_val(:,i));
1029 sim_data = rb_simulation(model, reduced_data);
1032 for k=1:length(sim_data.Delta)
1033 if(max_sim_data.Delta(k)<sim_data.Delta(k))
1034 max_sim_data.Delta(k) = sim_data.Delta(k);
1044 function draw_t_part_lines(model)
1049 for p=1:length(model.t_part_range)
1050 x_pos = model.t_part_range{p}(2);
1052 plot([x_pos,x_pos],limy,'r-.
');
1063 function [s1, s2, s3 ,s4, s5] = sort_low_to_high(v1, v2, v3, v4, v5)
1064 %function sorts the entries of v1 from low to high and changes the order of
1065 %the other vectors in the same manner as v1.
1066 %!!!!!!!!!!!works only for vectors with non negative entries
1068 s1=zeros(size(v1,1),size(v1,2));
1069 s2=zeros(size(v2,1),size(v2,2));
1070 s3=zeros(size(v3,1),size(v3,2));
1071 s4=zeros(size(v4,1),size(v4,2));
1072 s5=zeros(size(v5,1),size(v5,2));
1075 for i = 1:size(s1,2)
1076 %find starting value
1079 while (continue_loop)&&(indx<=size(v1,2))
1088 if (v1(j)~=-1)&&(v1(j)<minim)
Test reduced basis implementation.
function l2_error = fv_l2_error(U1, U2, W)
function computing the l2-error between the two fv-functions or function sequences in U1...