rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
rb_mu_element_indicators.m
Go to the documentation of this file.
1 function [eta, eta_info] = rb_mu_element_indicators( detailed_data, ...
2  offline_data,...
3  MMesh, Delta_train, model)
4 %function [eta, eta_info] = rb_mu_element_indicators(
5 % detailed_data, [offline_data],
6 % MMesh, Delta_train, model)
7 %
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
13 %
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
17 %
18 % 'nodes':
19 % eta(i) = max_{mu in (V(e))} Delta (Phi_t, mu)
20 %
21 % 'nodes_cogs':
22 % eta(i) = max_{mu in (V(e) and cog(e))} Delta (Phi_t, mu)
23 %
24 % 'nodes_skippedrefs':
25 % eta(i) = max_{mu in (V(e))} Delta (Phi_t, mu) +
26 % s(i)/s_max * max(Delta_train)
27 %
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)
31 %
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
36 % nodes_cogs mode
37 %
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.
43 %
44 % if Delta_train is empty, it is generated, if offline_data is
45 % empty, it is generated
46 
47 % Bernard Haasdonk 22.3.2007
48 
49 nleafelements = get(MMesh,'nleafelements');
50 eta = -1 * ones(1,nleafelements);
51 eta_info = [];
52 
53 % determine all vertex error estimators
54 
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);
59 end;
60 
61 if isempty(Delta_train)
62  M_train = get(MMesh,'vertex')';
63  Delta_train = rb_test_indicator(detailed_data,...
64  offline_data,...
65  M_train,[],...
66  model);
67 end;
68 
69 if isequal(model.RB_element_indicator_mode,'nodes_cogs') || ...
70  isequal(model.RB_element_indicator_mode,'nodes_cogs_skippedrefs')
71 
72  % determine all cog vertex estimators
73  M_cog = get(MMesh,'leafcogs')';
74  Delta_cog = rb_test_indicator(model,detailed_data,...
75  [],M_cog,[]);
76 end;
77 
78 % assemble eta(i) = max_{mu in (V(e) and cog(e) Delta (Phi_t, mu)
79 
80 %keyboard;
81 
82 li = get(MMesh,'leafelements');
83 
84 lv = get(MMesh,'vertexindex',li);
85 
86 Delta_vertex = reshape(Delta_train(lv(:)),size(lv));
87 
88 Max_Delta_vertex = max(Delta_vertex,[],2);
89 
90 % prepare return values
91 switch model.RB_element_indicator_mode
92  case 'nodes_cogs'
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;
96  case 'nodes'
97  % eta(i) = max_{mu in (V(e))} Delta (Phi_t, mu)
98  %
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 * ...
108  s(:);
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 * ...
117  s(:);
118  eta_info.Delta_cog = Delta_cog;
119  otherwise
120  error('element_indicator_mode in grid-refinement unknown');
121 end;
122 
123 eta_info.Delta_train = Delta_train;
124 
125 
126 
127 
128 
129 
130 
131 
132 
133 
134 
135 
136 % TO BE ADJUSTED TO NEW SYNTAX
137 %| \docupdate
Definition: leaf.m:17
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)