3 MMesh, Delta_train, model)
5 % detailed_data, [offline_data],
6 % MMesh, Delta_train, model)
8 % returns a vector with element-error indicators of the mu-grid
for
9 % all
leaf-elements. The current basis RB is used
for estimator
10 % computation, the MMesh is the adaptive hierarchical mesh
for the
11 % parameters. Delta_train indicates the current maximum error
12 % estimator
for the MMesh-vertices
14 %
return value
for a
leaf element i is depending on the field
15 % RB_element_indicator_mode in model.
16 % cog = center of gravity
19 % eta(i) = max_{mu in (V(e))} Delta (Phi_t, mu)
22 % eta(i) = max_{mu in (V(e) and cog(e))} Delta (Phi_t, mu)
24 %
'nodes_skippedrefs':
25 % eta(i) = max_{mu in (V(e))} Delta (Phi_t, mu) +
26 % s(i)/s_max * max(Delta_train)
28 %
'nodes_cogs_skippedrefs':
29 % eta(i) = max_{mu in (V(e) and cog(e))} Delta (Phi_t, mu) +
30 % s(i)/s_max * max(Delta_train)
32 % eta_info contains further detailed information, e.g.
for debugging.
33 % It consist of fields
34 % Delta_train : vector of vertex indicators (i.e. Delta_train of input)
35 % Delta_cog : vector of element-cog indicators in
case of
38 % required fields of model:
39 % RB_element_indicator_mode :
string indicating the mode, see above
40 % RB_element_indicator_s_max : integer giving the maximum
41 % acceptable number of skipped
42 % refinement steps of elements.
44 %
if Delta_train is empty, it is generated,
if offline_data is
45 % empty, it is generated
47 % Bernard Haasdonk 22.3.2007
49 nleafelements =
get(MMesh,
'nleafelements');
50 eta = -1 * ones(1,nleafelements);
53 % determine all vertex error estimators
55 if isempty(offline_data)
56 % model.Nmax = size(detailed_data.RB,2);
57 % model.N = size(detailed_data.RB,2);
58 offline_data = rb_offline_preparation(detailed_data,model);
61 if isempty(Delta_train)
62 M_train = get(MMesh,'vertex')';
69 if isequal(model.RB_element_indicator_mode,'nodes_cogs') || ...
70 isequal(model.RB_element_indicator_mode,'nodes_cogs_skippedrefs')
72 % determine all cog vertex estimators
73 M_cog = get(MMesh,'leafcogs')';
78 % assemble eta(i) = max_{mu in (V(e) and cog(e) Delta (Phi_t, mu)
82 li =
get(MMesh,
'leafelements');
84 lv =
get(MMesh,
'vertexindex',li);
86 Delta_vertex = reshape(Delta_train(lv(:)),size(lv));
88 Max_Delta_vertex = max(Delta_vertex,[],2);
90 % prepare
return values
91 switch model.RB_element_indicator_mode
93 % eta(i) = max_{mu in (V(e) and cog(e))} Delta (Phi_t, mu)
94 eta = max(Delta_cog(:),Max_Delta_vertex(:));
95 eta_info.Delta_cog = Delta_cog;
97 % eta(i) = max_{mu in (V(e))} Delta (Phi_t, mu)
99 eta = Max_Delta_vertex(:);
100 case 'nodes_skippedrefs'
101 % eta(i) = max_{mu in (V(e))} Delta (Phi_t, mu) +
102 % s(i)/s_max * epsilon
103 % determine number of skipped refinements of all
leaf elements
104 s = MMesh.refine_steps - MMesh.creation_step(li);
105 eta = Max_Delta_vertex(:) + ...
106 max(Max_Delta_vertex) / ...
107 model.RB_element_indicator_s_max * ...
109 case 'nodes_cogs_skippedrefs'
110 % eta(i) = max_{mu in (V(e) and cogs)} Delta (Phi_t, mu) +
111 % s(i)/s_max * epsilon
112 % determine number of skipped refinements of all
leaf elements
113 s = MMesh.refine_steps - MMesh.creation_step(li);
114 eta = max(Delta_cog(:),Max_Delta_vertex(:)) + ...
115 max(Max_Delta_vertex) / ...
116 model.RB_element_indicator_s_max * ...
118 eta_info.Delta_cog = Delta_cog;
120 error(
'element_indicator_mode in grid-refinement unknown');
123 eta_info.Delta_train = Delta_train;
136 % TO BE ADJUSTED TO NEW SYNTAX
function test_err = rb_test_indicator(model, detailed_data, reduced_data, M_test, savepath)
M_test,[savepath])
function [ eta , eta_info ] = rb_mu_element_indicators(detailed_data, offline_data, MMesh, Delta_train, model)
detailed_data, [offline_data], MMesh, Delta_train, model)