2 %
function model = convdiff_dune_model(params)
3 % convection diffusion example
using dune-rb for high dimensional computations
8 descr.name =
'laplace_dune';
9 descr.rb_problem_type =
'LinStatDune';
10 descr.RB_detailed_data_constructor = @LinStat.DetailedData;
11 %descr.RB_reduced_data_constructor = @LinEvol.ReducedData;
12 %% data that is definitely used outside of the detailed simulations
13 %% These values are now
set in dunerbconvdiff(
'init_model')
15 if (~isempty(getenv('DUNERBHOME')))
16 % addpath( fullfile( getenv('DUNERBHOME'), 'mexclient' ) );
17 addpath( getenv('DUNERBHOME') );
20 descr.mexptr = @mexclient;
22 [~] = mexclient('echo', 1);
24 is_connected = descr.mexptr('is_connected');
27 error('No connection to server!');
30 % server_params.serverhost = 'rbevol.uni-muenster.de'
31 % server_params.port = '1909'
32 % mexclient('init_server', server_params)
34 % copy model data from detailed dune-rb model
35 tmp_struct = descr.mexptr('init_model');
40 descr.mu_names = tmp_struct.mu_names;
41 descr.mu_ranges = tmp_struct.mu_ranges;
42 descr.mu = descr.mexptr('get_mu');
43 descr.run_dir = tmp_struct.cwd;
45 tmp = descr.mexptr('rb_symbolic_coefficients', {
'Laplace'}, {
'RHS'});
46 fns = fieldnames(tmp);
48 for i = 1:length(fns);
49 sym_coeffs.(fns{i}) =
'@(mu) [ ';
50 for j = 1:size(tmp.(fns{i}),2);
52 sym_coeffs.(fns{i}) = [ sym_coeffs.(fns{i}),
', ' ];
54 sym_coeffs.(fns{i}) = [ sym_coeffs.(fns{i}), tmp.(fns{i}){j} ];
56 sym_coeffs.(fns{i}) = [ sym_coeffs.(fns{i}) ,
' ]' ];
59 coeff_ops = structfun(@eval, sym_coeffs,
'UniformOutput',
false);
61 descr.coeff_ops.LI = coeff_ops.Laplace;
62 descr.coeff_ops.f = coeff_ops.RHS;
63 descr.L_I_inv_norm_bound = @(mu) 1/mu(1);
65 descr.filecache_ignore_fields_in_model = {
'coeff_ops',
'mu'};
68 descr.mu_list = {[5 0.5], [1 0.5], [1 0]};
71 descr.data_const_in_time = 1;
73 descr.RB_train_num_intervals = 5;
75 %descr.RB_train_size = [10 10];
76 descr.RB_train_size = 200;
78 descr.RB_stop_Nmax = 200;
80 descr.RB_val_size = 10;
82 descr.RB_stop_epsilon = 3e-5;
84 descr.RB_refinement_mode =
'adaptive';
86 descr.RB_customized_basis_generation_ptr = @my_greedy_basisgen;
87 %% choose generation mode
88 %descr.RB_generation_mode =
'greedy_uniform_fixed';
90 %% RB_generation_mode =
'random_fixed';
92 %% choose extension method
93 %descr.RB_extension_algorithm = @dune_RB_extension_PCA_fixspace;
95 %descr.RB_stop_timeout = 60*60; % 1 hour
96 %% stop on maximum number of base functions
97 %descr.RB_stop_Nmax = 30;
99 %descr.RB_stop_epsilon = 1e-9; % 0.003 is already realized by init data!!
100 %% stop on overfitting (needs a validation test
set)
101 %descr.RB_stop_max_val_train_ratio = inf;
103 %%descr.RB_test_size = 1000;
105 %% fix the rand seed in
case of RB_generation_mode = random_fixed
106 %descr.RB_train_rand_seed = 0.5;
107 %% trainig
set size in
case of RB_generation_mode = random_fixed
108 %descr.RB_train_size = 50;
110 %% choose the error indicator
111 %descr.RB_error_indicator =
'estimator'; % Delta from rb_simulation
113 % model.RB_error_indicator =
'error'; %
true error
115 function RB = my_basisgen(rmodel, sdd)
117 dmodel = rmodel.detailed_model;
118 descr = dmodel.descr;
119 if isempty(descr.mu_list)
120 descr.mu_list = {cellfun(@mean, rmodel.descr.mu_ranges,
'UniformOutput',
true)};
123 sdd.mu_list = descr.mu_list;
126 for m = 1:length(descr.mu_list)
127 next = descr.mexptr('rb_extension_PCA', descr.mu_list{m}, 1);
134 function RB = my_greedy_basisgen(rmodel, sdd)
135 disp('entered my_Greedy_basisgen');
137 dmodel = rmodel.detailed_model;
138 set_mu(dmodel, [1 0]);
139 set_mu(rmodel, [1 0]);
140 descr = rmodel.detailed_model.descr;
141 sdd.RB = descr.mexptr('init_data_basis');
143 reduced_data = gen_reduced_data(rmodel, sdd);
145 % Kommentar MD: Alle Description Felder, die mit RB_ beginnen, werden von
147 % (bg_descr.x == descr.RB_x)
148 bg_descr = rmodel.bg_descr;
150 %ps = ParameterSampling.Uniform(bg_descr.train_size);
151 %ps.init_sample(dmodel);
153 mus = rand_uniform(bg_descr.train_size,rmodel.mu_ranges);
158 while( max_err_est> bg_descr.stop_epsilon) && ...
159 (size(sdd.RB,2)< bg_descr.stop_Nmax)
162 errs = zeros(1, size(mus,2));
163 for i = 1:size(mus,2);
164 set_mu(rmodel, mus(:,i));
165 rb_sim_data = rb_simulation(rmodel,reduced_data);
166 errs(i) = rb_sim_data.Delta;
167 if rb_sim_data.Delta > max_err_est
169 max_err_est = rb_sim_data.Delta;
174 mu_max_list = [mu_max_list, max_err_est];
175 mu_list = [mu_list, mu_max];
176 disp(['max error estimator: ',num2str(max_err_est),...
177 ' for mu = ',num2str(mu_max')]);
181 next = descr.mexptr('rb_extension_PCA', mu_max, 1);
182 sdd.RB = [sdd.RB, next];
184 reduced_data = gen_reduced_data(rmodel,sdd);
185 disp(['new basis size: ',num2str(size(sdd.RB,2))]);
188 save('/tmp/maxes', 'mu_list', 'mu_max_list');