rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
SummedEI.m
1 classdef SummedEI < Greedy.Plugin.EICommon
2  % Plugin for the Greedy.Algorithm class generating collateral reduced basis
3  % space plus interpolation DOFs and a local grid for several different
4  % parameterized functions or operators.
5  %
6  % This can be used for the empirical interpolation of parametrized functions
7  % or operator evaluations.
8 
9  properties (Dependent)
10  % @copybrief Greedy.Plugin.EI.stop_Mmax
11  stop_Mmax;
12  end
13 
14  properties(Constant)
15  generated_basis_type = 'ei';
16  end
17 
18  properties(Access = private)
19  ei_container;
20 
21  index_map;
22  end
23 
24  methods
25  function seie = SummedEI(varargin)
26  % function seie = SummedEI(varargin)
27  % constructor "summing together a list of different EI plugin instances.
28  %
29  % Parameters:
30  % varargin: a list of EI plugin objects of type Greedy.Plugin.EI
31 
32  assert(all( cellfun(@(x) isa(x, 'Greedy.Plugin.Interface'), varargin) ));
33  assert(all( cellfun(@(x) isequal(x.generated_basis_type, 'ei'), varargin) ));
34 
35  seie = seie@Greedy.Plugin.EICommon(varargin{end}.generator);
36 
37  seie.ei_container = varargin;
38  idlist = cellfun(@(x) x.id, varargin, 'UniformOutput', false);
39 % seie.index_map = IdMapDataNodeMap(idlist);
40  seie.index_map = idlist;
41  seie.indicator_mode = seie.ei_container{1}.indicator_mode;
42  seie.relative_error = seie.ei_container{1}.relative_error;
43  seie.use_l2_error = seie.ei_container{1}.use_l2_error;
44  end
45 
46  function this = set.stop_Mmax(this, value)
47  for i = 1:length(this.ei_container)
48  this.ei_container{i}.stop_Mmax = value{i};
49  end
50  end
51 
52  function value = get.stop_Mmax(this)
53  value = DataTree.IdMapNode(this.index_map);
54  for i = 1:length(this.ei_container)
55  set(value, this.ei_container{i}.stop_Mmax);
56  end
57  end
58 
59  function detailed_data = init_basis(this, rmodel, model_data, M_train)
60  % function detailed_data = init_basis(this, rmodel, model_data, M_train)
61  % @copybrief .Greedy.Plugin.Interface.init_basis()
62  %
63  % @copydetails Greedy.Plugin.Interface.init_basis()
64  %
65  % Parameters:
66  % rmodel: of type .Greedy.User.IReducedModel
67  %
68  % Return values:
69  % detailed_data: of type .Greedy.DataTree.Detailed.IdMapNode
70  %
71  % This method initializes the detailed data node for all parametrized
72  % functions/operator evaluations.
73  detailed_data = Greedy.DataTree.Detailed.IdMapNode(this.index_map);
74  for i = 1:length(this.index_map)
75  set(detailed_data,i, init_basis(this.ei_container{i}, rmodel, model_data, M_train));
76  end
77  end
78 
79  function prepare_reduced_data(this, rmodel, detailed_data)
80  % function prepare_reduced_data(this, rmodel, detailed_data)
82  %
84  %
85  % Parameters:
86  % rmodel: of type .Greedy.User.IReducedModel
87  % detailed_data: of type .Greedy.DataTree.Detailed.IdMapNode
88 
89  prepare_reduced_data(this.ei_container{1}, rmodel, get(detailed_data, 1));
90 % for i = 1:length(this.index_map)
91 % if this.ei_container{i}.needs_preparation
92 % prepare_reduced_data(this.ei_container{i}, rmodel, get(detailed_data,i));
93 % end
94 % end
95  end
96 
97  function [max_errs, max_err_sequence, max_mu_index] = error_indicators(this, rmodel, detailed_data, parameter_set, reuse_reduced_data)
98  % function [max_errs, max_err_sequence, max_mu_index] = error_indicators(this, rmodel, detailed_data, parameter_set, reuse_reduced_data)
99  % this function should never be used. It calls the error_indicators()
100  % method for the first wrapped parametrized function/operator.
101  %
102  % @copydetails .Greedy.Plugin.Default.error_indicators()
103  %
104  % Parameters:
105  % rmodel: of type Greedy.User.IReducedModel
106  % detailed_data: of type Greedy.DataTree.Detailed.IdMapNode
107  if nargin < 5
108  reuse_reduced_data = false;
109  end
110  if nargin < 4
111  parameter_set = [];
112  end
113 
114  warning('RBmatlab:Greedy:Plugin:SummedEI:never_use', 'This function should never be used');
115  [max_errs, max_err_sequence, max_mu_index] = error_indicators(this.ei_container{1}, rmodel, get(detailed_data, 1), parameter_set, reuse_reduced_data);
116 % max_errs = DataTree.IdMapNode(this.index_map);
117 % max_mu_index = DataTree.IdMapNode(this.index_map);
118 % for i = 1:length(this.index_map)
119 % [me, mu] = error_indicator(this.ei_container{i}, model, get(detailed_data,i), detailed_gen);
120 % set(max_errs, i, me);
121 % set(max_mu_index, i, mu);
122 % end
123  end
124 
125  function errs = compute_error(this, rmodel, reduced_data, detailed_data)
126  % function errs = compute_error(this, rmodel, reduced_data, detailed_data)
127  % this function should never be used. It calls the compute_error()
128  % method for the first wrapped parametrized function/operator.
129  %
130  % @copydetails .Greedy.Plugin.Default.compute_error()
131  %
132  % Parameters:
133  % rmodel: of type Greedy.User.IReducedModel
134  % reduced_data: of type Greedy.User.ReducedData
135  % detailed_data: of type Greedy.DataTree.Detailed.IdMapNode
136 
137  warning('RBmatlab:Greedy:Plugin:SummedEI:never_use', 'This function should never be used');
138  errs = compute_error(this.ei_container{1}, rmodel, reduced_data, get(detailed_data,1));
139 % errs = DataTree.IdMapNode(this.index_map);
140 % for i = 1:length(this.index_map)
141 % err = compute_error(this.ei_container{i}, rmodel, get(detailed_data,i));
142 % set(errs, i, err);
143 % end
144  end
145 
146  function Uapprox = generate_reduced(this, rmodel, reduced_data, detailed_data, U)
147  % function Uapprox = generate_reduced(this, rmodel, reduced_data, detailed_data)
148  % this function should never be used. It calls the generate_reduced()
149  % method for the first wrapped parametrized function/operator.
150  %
151  % @copydetails .Greedy.Plugin.Default.generate_reduced()
152  %
153  % Parameters:
154  % rmodel: of type Greedy.User.IReducedModel
155  % reduced_data: of type Greedy.User.ReducedData
156  % detailed_data: of type Greedy.DataTree.Detailed.IdMapNode
157 
158  warning('RBmatlab:Greedy:Plugin:SummedEI:never_use', 'This function should never be used');
159  Uapprox = generate_reduced(this.ei_container{1}, rmodel, reduced_data, get(detailed_data,1));
160 % Uapprox = DataTree.IdMapNode(this.index_map);
161 % for i = 1:length(this.index_map)
162 % Ua = generate_reduced(this.ei_container{i}, rmodel, dummy, get(detailed_data,i));
163 % set(Uapprox, i, Ua);
164 % end
165  end
166 
167  function [breakloop, reason] = pre_check_for_end(this, rmodel, detailed_data)
168  % function [breakloop, reason] = pre_check_for_end(this, rmodel, detailed_data)
170  %
172  %
173  % Parameters:
174  % rmodel: of type .Greedy.User.IReducedModel
175  % detailed_data: of type .Greedy.DataTree.Detailed.IdMapNode
176  %
177  % This method only stop when ALL parts are ready.
178  breakloop = true;
179  reason = '';
180  for i = 1:length(this.index_map)
181  [breakloop_new, reason_new]=pre_check_for_end(this.ei_container{i}, rmodel, get(detailed_data,i));
182 
183  breakloop = breakloop & breakloop_new;
184  reason = [reason, ' ', reason_new];
185  end
186  end
187 
188  function detailed_data = basis_extension(this, rmodel, detailed_data, max_err_seq, mu)
189  % function detailed_data = basis_extension(this, rmodel, detailed_data, max_err_seq, mu)
191  %
193  %
194  % Parameters:
195  % rmodel: of type .Greedy.User.IReducedModel
196  % detailed_data: of type .Greedy.DataTree.Detailed.IdMapNode
197  %
198  % Return values:
199  % detailed_data: of type .Greedy.DataTree.Detailed.IdMapNode
200 
201  for i = 1:length(this.ei_container)
202  % only update basis spaces if end check is negative
203  if ~pre_check_for_end(this.ei_container{i}, rmodel, get(detailed_data,i))
204  set( detailed_data,i,...
205  basis_extension(this.ei_container{i}, rmodel,...
206  get(detailed_data,i), max_err_seq, mu) );
207  end
208  end
209  end
210 
211  function detailed_data = finalize(this, rmodel, detailed_data)
212  % function detailed_data = finalize(this, rmodel, detailed_data)
213  % @copybrief Greedy.Plugin.Interface.finalize()
214  %
215  % @copydetails Greedy.Plugin.Interface.finalize()
216  %
217  % Parameters:
218  % rmodel: of type .Greedy.User.IReducedModel
219  % detailed_data: of type .Greedy.DataTree.Detailed.IdMapNode
220  %
221  % Return values:
222  % detailed_data: of type .Greedy.DataTree.Detailed.IdMapNode
223  for i = 1:length(this.ei_container)
224  set( detailed_data, i, ...
225  finalize(this.ei_container{i}, rmodel, get(detailed_data, i)) );
226  end
227  dd1 = get(detailed_data, 1);
228  for i = 2:length(this.ei_container)
229  dd = get(detailed_data, i);
230  end
231  end
232 
233  function cop = copy(this)
234  containercopy = cellfun(@(x) copy(x), this.ei_container, 'UniformOutput', false);
235  cop = SummedEI(containercopy);
236  end
237  end
238 end
virtual function [ breakloop , reason ] = pre_check_for_end(Greedy.User.IReducedModel rmodel,Greedy.User.IDetailedData detailed_data)
checks whether the basis generation process has come to an end.
Interface class for extension algorithms which define the basis extension routines used by the abstra...
Definition: Interface.m:19
DataTree implementation for generated detailed and reduced data
Definition: DuneRBLeafNode.m:2
Data Tree element which can be filtered by ids
Definition: IdMapNode.m:18
virtual function Greedy.User.IDetailedData detailed_data = finalize(Greedy.User.IReducedModel rmodel,Greedy.User.IDetailedData detailed_data)
function called after the last extension process
default greedy basis generation class
Definition: Algorithm.m:18
a default reduced data implementation which stores a data tree object copying the structure of a Gree...
Definition: ReducedData.m:19
virtual function Greedy.DataTree.Detailed.INode detailed_data = init_basis(Greedy.User.IReducedModel rmodel,ModelData model_data,ParameterSampling.Interface M_train)
creates an initial detailed data node storing an initial reduced basis
DataTree specialization for detailed data generated by a Greedy algorithm instance.
Definition: DuneRBLeafNode.m:3
specialization of detailed data tree node with an id map for its children
Definition: IdMapNode.m:20
Specialization plugins for the greedy algorithm.
Definition: Default.m:2
virtual function Greedy.User.IDetailedData detailed_data = basis_extension(Greedy.User.IReducedModel rmodel,Greedy.User.IDetailedData detailed_data, max_err_seq, mu)
extends the reduced basis space from a given function .
interface for Greedy.Plugin.Interface implementations generating an empirical interpolation basis ...
Definition: EICommon.m:19
Plugin for the Greedy.Algorithm class generating a collateral reduced basis space plus interpolation ...
Definition: EI.m:19
virtual function prepare_reduced_data(Greedy.User.IReducedModel rmodel,Greedy.User.IDetailedData detailed_data)
prepares reduced data that is necessary for the execution of other methods if indicated by needs_prep...
stop_Mmax
maximum number of generated collateral reduced basis vectors.
Definition: EI.m:71
Customizable implementation of an abstract greedy algorithm.
Definition: DuneRBLeafNode.m:1
interface specialization for a reduced model that can be used with the Greedy algorithm for basis gen...
Definition: IReducedModel.m:19
Plugin for the Greedy.Algorithm class generating collateral reduced basis space plus interpolation DO...
Definition: SummedEI.m:19