3 % method which modifies reduced_data, which is the data, that will
4 % be passed to the online-simulation algorithm.
6 % Typically,
this routine only does a submatrix extraction of the
'Nmax' sized
7 % offline-objects to produce
'N' sized objects
for the real simulation.
9 % Required fields of model:
10 % N : number of reduced basis vectors to choose
11 % N_der : number of reduced basis vectors in derivative solution
13 % Optional fields of model:
14 % name_output_functional : name of an output functional
16 % Required fields of reduced_data:
17 % N : number of reduced basis vectors in the reduced_data.
19 % optional fields of reduced_data:
20 % a0 : a cell array sequence of N-vector components of initial data
22 % LL_E : a cell array sequence of N x N component-Matrices of
explicit
23 %
operator evaluations.
24 % LL_I : a cell array sequence of N x N component-Matrices of implicit
25 %
operator evaluations.
26 % bb : a cell array sequence of N-vector components of the offset
27 % bb_I : a cell array sequence of N-vector components of the implicit offset
31 % generated fields of reduced_data_subset:
32 % a0 : a cell array sequence of N-vector components of initial data
34 % LL_E : a cell array sequence of N x N component-Matrices of
explicit
35 %
operator evaluations.
36 % LL_I : a cell array sequence of N x N component-Matrices of implicit
37 %
operator evaluations.
38 % bb : a cell array sequence of N-vector components of the offset
39 % bb_I : a cell array sequence of N-vector components of the implicit offset
42 %s_RB : in
case of a given output functional,
this is a vector of output
43 % functional values of the reduced basis
44 % s_l2norm : in
case of a given output functional,
this is the `L^2`-norm of
45 % the output functional
46 % N : number of reduced basis vectors in the reduced_data.
48 % \note The fields
for 'reduced_data_subset' are only generated
if they exist in
51 % Markus Dihlmann 18.11.2011
53 reduced_data_subset = reduced_data;
57 if isfield(reduced_data,
'L_E_dd')
58 incl_derivative=1;%with derivative caclulation
63 nr_der = length(reduced_data.c0);
65 if model.N > length(reduced_data.a0{1})
66 error(
'N too large for current size of reduced basis!');
70 if isfield(model,
'N_der')
73 N_der = N.*ones(1,nr_der);
76 if N_der(i) >length(reduced_data.c0{i}{1})
77 error(
'N_der too large for current size of derivative reduced basis')
83 if isfield(reduced_data, 'a0')
84 reduced_data_subset.a0 = subblock_sequence(reduced_data.a0,1:N);
86 if isfield(reduced_data, 'LL_I')
87 reduced_data_subset.LL_I = subblock_sequence(reduced_data.LL_I,1:N,1:N);
89 if isfield(reduced_data, 'LL_E')
90 reduced_data_subset.LL_E = subblock_sequence(reduced_data.LL_E,1:N,1:N);
92 if isfield(reduced_data, 'bb')
93 reduced_data_subset.bb = subblock_sequence(reduced_data.bb,1:N);
95 if isfield(reduced_data, 'bb_I')
96 reduced_data_subset.bb_I = subblock_sequence(reduced_data.bb_I,1:N);
98 if isfield(reduced_data, 'M_E')
99 reduced_data_subset.M_E = subblock_sequence(reduced_data.M_E,1:N,1:N);
101 if isfield(reduced_data, 'M_b')
102 reduced_data_subset.M_b = subblock_sequence(reduced_data.M_b,1:N);
104 if isfield(reduced_data, 'M_EE')
105 reduced_data_subset.M_EE = subblock_sequence(reduced_data.M_EE,1:N,1:N);
107 if isfield(reduced_data, 'M_Eb')
108 reduced_data_subset.M_Eb = subblock_sequence(reduced_data.M_Eb,1:N);
110 if isfield(reduced_data, 'M_I')
111 reduced_data_subset.M_I = subblock_sequence(reduced_data.M_I,1:N,1:N);
113 if isfield(reduced_data, 'M_II')
114 reduced_data_subset.M_II = subblock_sequence(reduced_data.M_II,1:N,1:N);
116 if isfield(reduced_data, 'M_IE')
117 reduced_data_subset.M_IE = subblock_sequence(reduced_data.M_IE,1:N,1:N);
119 if isfield(reduced_data, 'M_Ib')
120 reduced_data_subset.M_Ib = subblock_sequence(reduced_data.M_Ib,1:N);
125 if isfield(reduced_data,'c0')
126 reduced_data_subset.c0 = cell(1,nr_der);
128 reduced_data_subset.c0{p} = subblock_sequence(reduced_data.c0{p},1:N_der(p));
131 if isfield(reduced_data,
'L_E_dd')
132 reduced_data_subset.L_E_dd = cell(1,nr_der);
134 reduced_data_subset.L_E_dd{p} = subblock_sequence(reduced_data.L_E_dd{p},1:N_der(p),1:N_der(p));
137 if isfield(reduced_data,
'L_I_dd')
138 reduced_data_subset.L_I_dd = cell(1,nr_der);
140 reduced_data_subset.L_I_dd{p} = subblock_sequence(reduced_data.L_I_dd{p},1:N_der(p),1:N_der(p));
143 if isfield(reduced_data,
'dL_E_sd')
144 reduced_data_subset.dL_E_sd = cell(1,nr_der);
146 reduced_data_subset.dL_E_sd{p} = subblock_sequence(reduced_data.dL_E_sd{p},1:N_der(p),1:N);
149 if isfield(reduced_data,
'dL_I_sd')
150 reduced_data_subset.dL_I_sd = cell(1,nr_der);
152 reduced_data_subset.dL_I_sd{p} = subblock_sequence(reduced_data.dL_I_sd{p},1:N_der(p),1:N);
155 if isfield(reduced_data,
'db')
156 reduced_data_subset.db = cell(1,nr_der);
158 reduced_data_subset.db{p} = subblock_sequence(reduced_data.db{p},1:N_der(p));
161 if isfield(reduced_data,
'K_E')
162 reduced_data_subset.K_E = cell(1,nr_der);
164 reduced_data_subset.K_E{p} = subblock_sequence(reduced_data.K_E{p},1:N_der(p),1:N_der(p));
167 if isfield(reduced_data,
'K_I')
168 reduced_data_subset.K_I = cell(1,nr_der);
170 reduced_data_subset.K_I{p} = subblock_sequence(reduced_data.K_I{p},1:N_der(p),1:N_der(p));
173 if isfield(reduced_data,
'K_EE')
174 reduced_data_subset.K_EE = cell(1,nr_der);
176 reduced_data_subset.K_EE{p} = subblock_sequence(reduced_data.K_EE{p},1:N_der(p),1:N_der(p));
179 if isfield(reduced_data,
'K_II')
180 reduced_data_subset.K_II = cell(1,nr_der);
182 reduced_data_subset.K_II{p} = subblock_sequence(reduced_data.K_II{p},1:N_der(p),1:N_der(p));
185 if isfield(reduced_data,
'K_IE')
186 reduced_data_subset.K_IE = cell(1,nr_der);
188 reduced_data_subset.K_IE{p} = subblock_sequence(reduced_data.K_IE{p},1:N_der(p),1:N_der(p));
191 if isfield(reduced_data,
'K_EdEd')
192 reduced_data_subset.K_EdEd = cell(1,nr_der);
194 reduced_data_subset.K_EdEd{p} = subblock_sequence(reduced_data.K_EdEd{p},1:N,1:N);
197 if isfield(reduced_data,
'K_IdId')
198 reduced_data_subset.K_IdId = cell(1,nr_der);
200 reduced_data_subset.K_IdId{p} = subblock_sequence(reduced_data.K_IdId{p},1:N,1:N);
203 if isfield(reduced_data,
'K_Ed')
204 reduced_data_subset.K_Ed = cell(1,nr_der);
206 reduced_data_subset.K_Ed{p} = subblock_sequence(reduced_data.K_Ed{p},1:N,1:N_der(p));
209 if isfield(reduced_data,
'K_Id')
210 reduced_data_subset.K_Id = cell(1,nr_der);
212 reduced_data_subset.K_Id{p} = subblock_sequence(reduced_data.K_Id{p},1:N_der(p),1:N);
215 if isfield(reduced_data,
'K_bd')
216 reduced_data_subset.K_bd = cell(1,nr_der);
218 reduced_data_subset.K_bd{p} = subblock_sequence(reduced_data.K_bd{p},1:N_der(p));
221 if isfield(reduced_data,
'K_IEd')
222 reduced_data_subset.K_IEd = cell(1,nr_der);
224 reduced_data_subset.K_IEd{p} = subblock_sequence(reduced_data.K_IEd{p},1:N_der(p),1:N);
227 if isfield(reduced_data,
'K_IId')
228 reduced_data_subset.K_IId = cell(1,nr_der);
230 reduced_data_subset.K_IId{p} = subblock_sequence(reduced_data.K_IId{p},1:N_der(p),1:N);
233 if isfield(reduced_data,
'K_Ibd')
234 reduced_data_subset.K_Ibd = cell(1,nr_der);
236 reduced_data_subset.K_Ibd{p} = subblock_sequence(reduced_data.K_Ibd{p},1:N_der(p));
239 if isfield(reduced_data,
'K_EEd')
240 reduced_data_subset.K_EEd = cell(1,nr_der);
242 reduced_data_subset.K_EEd{p} = subblock_sequence(reduced_data.K_EEd{p},1:N_der(p),1:N);
245 if isfield(reduced_data,
'K_EId')
246 reduced_data_subset.K_EId = cell(1,nr_der);
248 reduced_data_subset.K_EId{p} = subblock_sequence(reduced_data.K_EId{p},1:N_der(p),1:N);
251 if isfield(reduced_data,
'K_Ebd')
252 reduced_data_subset.K_Ebd = cell(1,nr_der);
254 reduced_data_subset.K_Ebd{p} = subblock_sequence(reduced_data.K_Ebd{p},1:N_der(p));
257 if isfield(reduced_data,
'K_EdId')
258 reduced_data_subset.K_EdId = cell(1,nr_der);
260 reduced_data_subset.K_EdId{p} = subblock_sequence(reduced_data.K_EdId{p},1:N,1:N);
263 if isfield(reduced_data,
'K_Edbd')
264 reduced_data_subset.K_Edbd = cell(1,nr_der);
266 reduced_data_subset.K_Edbd{p} = subblock_sequence(reduced_data.K_Edbd{p},1:N);
269 if isfield(reduced_data,
'K_Idbd')
270 reduced_data_subset.K_Idbd= cell(1,nr_der);
272 reduced_data_subset.K_Idbd{p} = subblock_sequence(reduced_data.K_Idbd{p},1:N);
277 else %Extraction without derivative calculations
278 % extract correct N-sized submatrices and subvectors from reduced_data
279 if model.N > length(reduced_data.a0{1})
280 error('N too large for current size of reduced basis!');
284 if isfield(reduced_data, 'a0')
285 reduced_data_subset.a0 = subblock_sequence(reduced_data.a0,1:N);
287 if isfield(reduced_data, 'LL_I')
288 reduced_data_subset.LL_I = subblock_sequence(reduced_data.LL_I,1:N,1:N);
290 if isfield(reduced_data, 'LL_E')
291 reduced_data_subset.LL_E = subblock_sequence(reduced_data.LL_E,1:N,1:N);
293 if isfield(reduced_data, 'bb')
294 reduced_data_subset.bb = subblock_sequence(reduced_data.bb,1:N);
296 if isfield(reduced_data, 'bb_I')
297 reduced_data_subset.bb_I = subblock_sequence(reduced_data.bb_I,1:N);
299 if isfield(reduced_data, 'M_E')
300 reduced_data_subset.M_E = subblock_sequence(reduced_data.M_E,1:N,1:N);
302 if isfield(reduced_data, 'M_b')
303 reduced_data_subset.M_b = subblock_sequence(reduced_data.M_b,1:N);
305 if isfield(reduced_data, 'M_EE')
306 reduced_data_subset.M_EE = subblock_sequence(reduced_data.M_EE,1:N,1:N);
308 if isfield(reduced_data, 'M_Eb')
309 reduced_data_subset.M_Eb = subblock_sequence(reduced_data.M_Eb,1:N);
311 % NICH BENÖTIGT, DA EH SKALAR?
312 % if isfield(reduced_data, 'M_bb')
313 % reduced_data_subset.M_bb = subblock_sequence(reduced_data.M_bb,1);
315 if isfield(reduced_data, 'M_I')
316 reduced_data_subset.M_I = subblock_sequence(reduced_data.M_I,1:N,1:N);
318 if isfield(reduced_data, 'M_II')
319 reduced_data_subset.M_II = subblock_sequence(reduced_data.M_II,1:N,1:N);
321 if isfield(reduced_data, 'M_IE')
322 reduced_data_subset.M_IE = subblock_sequence(reduced_data.M_IE,1:N,1:N);
324 if isfield(reduced_data, 'M_Ib')
325 reduced_data_subset.M_Ib = subblock_sequence(reduced_data.M_Ib,1:N);
327 if isfield(reduced_data, 'M_EdEd')
328 reduced_data_subset.M_EdEd = subblock_sequence(reduced_data.M_EdEd,1:N,1:N);
330 if isfield(reduced_data, 'M_IdId')
331 reduced_data_subset.M_IdId = subblock_sequence(reduced_data.M_IdId,1:N,1:N);
333 % NICHT BENÖTIGT, DA EH SKALAR?
334 % if isfield(reduced_data, 'M_bdbd')
335 % reduced_data_subset.M_bdbd = subblock_sequence(reduced_data.M_bdbd,1);
337 if isfield(reduced_data, 'M_Ed')
338 reduced_data_subset.M_Ed = subblock_sequence(reduced_data.M_Ed,1:N,1:N);
340 if isfield(reduced_data, 'M_Id')
341 reduced_data_subset.M_Id = subblock_sequence(reduced_data.M_Id,1:N,1:N);
343 if isfield(reduced_data, 'M_bd')
344 reduced_data_subset.M_bd = subblock_sequence(reduced_data.M_bd,1:N);
346 if isfield(reduced_data, 'M_IEd')
347 reduced_data_subset.M_IEd = subblock_sequence(reduced_data.M_IEd,1:N,1:N);
349 if isfield(reduced_data, 'M_IId')
350 reduced_data_subset.M_IId = subblock_sequence(reduced_data.M_IId,1:N,1:N);
352 if isfield(reduced_data, 'M_Ibd')
353 reduced_data_subset.M_Ibd = subblock_sequence(reduced_data.M_Ibd,1:N);
355 if isfield(reduced_data, 'M_EEd')
356 reduced_data_subset.M_EEd = subblock_sequence(reduced_data.M_EEd,1:N,1:N);
358 if isfield(reduced_data, 'M_EId')
359 reduced_data_subset.M_EId = subblock_sequence(reduced_data.M_EId,1:N,1:N);
361 if isfield(reduced_data, 'M_Ebd')
362 reduced_data_subset.M_Ebd = subblock_sequence(reduced_data.M_Ebd,1:N);
364 if isfield(reduced_data, 'M_EdId')
365 reduced_data_subset.M_EdId = subblock_sequence(reduced_data.M_EdId,1:N,1:N);
367 if isfield(reduced_data, 'M_Edbd')
368 reduced_data_subset.M_Edbd = subblock_sequence(reduced_data.M_Edbd,1:N);
370 if isfield(reduced_data, 'M_Idbd')
371 reduced_data_subset.M_Idbd = subblock_sequence(reduced_data.M_Idbd,1:N);
377 if isfield(model,'name_output_functional')
378 reduced_data_subset.s_RB = (reduced_data.s_RB(1:N));
379 if isfield(reduced_data,'s_l2norm')
380 reduced_data_subset.s_l2norm = reduced_data.s_l2norm;
383 reduced_data_subset.s_RB_der = cell(1,nr_der);
385 reduced_data_subset.s_RB_der{p} = reduced_data.s_RB_der{p}(1:N_der(p));
391 reduced_data_subset.N = N;
393 reduced_data_subset.N_der = N_der;
function reduced_data_subset = lin_evol_opt_reduced_data_subset_separate_bases(model, reduced_data)
method which modifies reduced_data, which is the data, that will be passed to the online-simulation a...