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.
6 % This can be used
for the empirical interpolation of parametrized functions
7 % or
operator evaluations.
15 generated_basis_type = 'ei';
18 properties(Access = private)
27 % constructor "summing together a list of different
EI plugin instances.
30 % varargin: a list of
EI plugin objects of type Greedy.Plugin.
EI
32 assert(all( cellfun(@(x) isa(x, 'Greedy.Plugin.
Interface'), varargin) ));
33 assert(all( cellfun(@(x) isequal(x.generated_basis_type, 'ei'), varargin) ));
35 seie = seie@Greedy.Plugin.
EICommon(varargin{end}.generator);
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;
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};
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);
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()
66 % rmodel: of type .Greedy.User.IReducedModel
69 % detailed_data: of type .Greedy.DataTree.Detailed.IdMapNode
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));
79 function prepare_reduced_data(
this, rmodel, detailed_data)
80 %
function prepare_reduced_data(
this, rmodel, detailed_data)
86 % rmodel: of type .Greedy.User.IReducedModel
87 % detailed_data: of type .Greedy.DataTree.Detailed.IdMapNode
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));
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.
102 % @copydetails .Greedy.Plugin.Default.error_indicators()
108 reuse_reduced_data =
false;
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);
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.
130 % @copydetails .Greedy.Plugin.Default.compute_error()
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));
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.
151 % @copydetails .Greedy.Plugin.Default.generate_reduced()
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);
167 function [breakloop, reason] = pre_check_for_end(
this, rmodel, detailed_data)
168 %
function [breakloop, reason] = pre_check_for_end(
this, rmodel, detailed_data)
174 % rmodel: of type .Greedy.User.IReducedModel
175 % detailed_data: of type .Greedy.DataTree.Detailed.IdMapNode
177 % This method only stop when ALL parts are ready.
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));
183 breakloop = breakloop & breakloop_new;
184 reason = [reason, ' ', reason_new];
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)
195 % rmodel: of type .Greedy.User.IReducedModel
196 % detailed_data: of type .Greedy.DataTree.Detailed.IdMapNode
199 % detailed_data: of type .Greedy.DataTree.Detailed.IdMapNode
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) );
211 function detailed_data = finalize(
this, rmodel, detailed_data)
212 %
function detailed_data = finalize(
this, rmodel, detailed_data)
218 % rmodel: of type .Greedy.User.IReducedModel
219 % detailed_data: of type .Greedy.DataTree.Detailed.IdMapNode
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)) );
227 dd1 =
get(detailed_data, 1);
228 for i = 2:length(this.ei_container)
229 dd = get(detailed_data, i);
233 function cop = copy(this)
234 containercopy = cellfun(@(x) copy(x), this.ei_container, 'UniformOutput', false);