rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
laplace_dune_descr.m
Go to the documentation of this file.
1 function descr = laplace_dune_descr(params)
2 % function model = convdiff_dune_model(params)
3 % convection diffusion example using dune-rb for high dimensional computations
4 % and data structures
5 
6 descr = LinStat.descr_default;
7 
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')
14 
15 if (~isempty(getenv('DUNERBHOME')))
16 % addpath( fullfile( getenv('DUNERBHOME'), 'mexclient' ) );
17  addpath( getenv('DUNERBHOME') );
18 end
19 
20 descr.mexptr = @mexclient;
21 
22 [~] = mexclient('echo', 1);
23 
24 is_connected = descr.mexptr('is_connected');
25 
26 if (~is_connected)
27  error('No connection to server!');
28 end
29 
30 % server_params.serverhost = 'rbevol.uni-muenster.de'
31 % server_params.port = '1909'
32 % mexclient('init_server', server_params)
33 
34 % copy model data from detailed dune-rb model
35 tmp_struct = descr.mexptr('init_model');
36 
37 %model.diffusion = 0;
38 %model.velocity
39 
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;
44 
45 tmp = descr.mexptr('rb_symbolic_coefficients', {'Laplace'}, {'RHS'});
46 fns = fieldnames(tmp);
47 sym_coeffs = [];
48 for i = 1:length(fns);
49  sym_coeffs.(fns{i}) = '@(mu) [ ';
50  for j = 1:size(tmp.(fns{i}),2);
51  if j > 1
52  sym_coeffs.(fns{i}) = [ sym_coeffs.(fns{i}), ', ' ];
53  end
54  sym_coeffs.(fns{i}) = [ sym_coeffs.(fns{i}), tmp.(fns{i}){j} ];
55  end
56  sym_coeffs.(fns{i}) = [ sym_coeffs.(fns{i}) , ' ]' ];
57 end
58 
59 coeff_ops = structfun(@eval, sym_coeffs, 'UniformOutput', false);
60 
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);
64 
65 descr.filecache_ignore_fields_in_model = {'coeff_ops', 'mu'};
66 
67 descr.verbose = 1;
68 descr.mu_list = {[5 0.5], [1 0.5], [1 0]};
69 descr.debug = 0;
70 
71 descr.data_const_in_time = 1;
72 
73 descr.RB_train_num_intervals = 5;
74 
75 %descr.RB_train_size = [10 10];
76 descr.RB_train_size = 200;
77 
78 descr.RB_stop_Nmax = 200;
79 
80 descr.RB_val_size = 10;
81 
82 descr.RB_stop_epsilon = 3e-5;
83 
84 descr.RB_refinement_mode = 'adaptive';
85 
86 descr.RB_customized_basis_generation_ptr = @my_greedy_basisgen;
87 %% choose generation mode
88 %descr.RB_generation_mode = 'greedy_uniform_fixed';
89 %% alternative:
90 %% RB_generation_mode = 'random_fixed';
91 
92 %% choose extension method
93 %descr.RB_extension_algorithm = @dune_RB_extension_PCA_fixspace;
94 %% stop timeout
95 %descr.RB_stop_timeout = 60*60; % 1 hour
96 %% stop on maximum number of base functions
97 %descr.RB_stop_Nmax = 30;
98 %% stop on epsilon
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;
102 
103 %%descr.RB_test_size = 1000;
104 
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;
109 
110 %% choose the error indicator
111 %descr.RB_error_indicator = 'estimator'; % Delta from rb_simulation
112 %% alternative:
113 % model.RB_error_indicator = 'error'; % true error
114 
115 function RB = my_basisgen(rmodel, sdd)
116 
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)};
121  end
122 
123  sdd.mu_list = descr.mu_list;
124  RB = [];
125 
126  for m = 1:length(descr.mu_list)
127  next = descr.mexptr('rb_extension_PCA', descr.mu_list{m}, 1);
128  if next == 0
129  continue;
130  end
131  RB = [ RB, next ];
132  end
133 
134 function RB = my_greedy_basisgen(rmodel, sdd)
135 disp('entered my_Greedy_basisgen');
136 
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');
142 
143 reduced_data = gen_reduced_data(rmodel, sdd);
144 
145 % Kommentar MD: Alle Description Felder, die mit RB_ beginnen, werden von
146 % gen_reduced_model in das Feld bg_descr kopiert (ohne den Präfix 'RB_')
147 % (bg_descr.x == descr.RB_x)
148 bg_descr = rmodel.bg_descr;
149 
150 %ps = ParameterSampling.Uniform(bg_descr.train_size);
151 %ps.init_sample(dmodel);
152 %mus = ps.sample';
153 mus = rand_uniform(bg_descr.train_size,rmodel.mu_ranges);
154 disp(mus);
155 max_err_est = 1e10;
156 mu_max_list = [];
157 mu_list = [];
158 while( max_err_est> bg_descr.stop_epsilon) && ...
159  (size(sdd.RB,2)< bg_descr.stop_Nmax)
160  max_err_est = 0;
161  mu_max = [];
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
168  mu_max = mus(:,i);
169  max_err_est = rb_sim_data.Delta;
170  end
171 
172  end
173  disp(errs);
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')]);
178  if (isempty(mu_max))
179  break;
180  end
181  next = descr.mexptr('rb_extension_PCA', mu_max, 1);
182  sdd.RB = [sdd.RB, next];
183 
184  reduced_data = gen_reduced_data(rmodel,sdd);
185  disp(['new basis size: ',num2str(size(sdd.RB,2))]);
186 end
187 
188 save('/tmp/maxes', 'mu_list', 'mu_max_list');
189 
190 RB = sdd.RB;
191 
Reduced basis implementation for linear stationary PDEs.
So far, this only implements the SimpleDetailedData class.
Definition: DetailedData.m:18
Reduced basis implementation for linear evolution equations.
Parameter sampling sets.
Definition: Interface.m:1
Reduced data implementation for linear evolution problems with finite volume discretizations.
Definition: ReducedData.m:18
function rmodel = gen_reduced_model(dmodel,BasisGenDescr bg_descr)
generates an IReducedModel instance from a description structure.
function descr = laplace_dune_descr(params)
convection diffusion example using dune-rb for high dimensional computations and data structures ...