rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
lin_evol_opt_reduced_data_subset_separate_bases.m
Go to the documentation of this file.
1 function reduced_data_subset = lin_evol_opt_reduced_data_subset_separate_bases(model,reduced_data)
2 %function reduced_data_subset = lin_evol_opt_reduced_data_subset_separate_bases(model,reduced_data)
3 % method which modifies reduced_data, which is the data, that will
4 % be passed to the online-simulation algorithm.
5 %
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.
8 %
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
12 %
13 % Optional fields of model:
14 % name_output_functional : name of an output functional
15 %
16 % Required fields of reduced_data:
17 % N : number of reduced basis vectors in the reduced_data.
18 %
19 % optional fields of reduced_data:
20 % a0 : a cell array sequence of N-vector components of initial data
21 % projection
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
28 % ...
29 %...
30 %
31 % generated fields of reduced_data_subset:
32 % a0 : a cell array sequence of N-vector components of initial data
33 % projection
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
40 % .,...
41 %...
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.
47 %
48 % \note The fields for 'reduced_data_subset' are only generated if they exist in
49 % 'reduced_data'.
50 
51 % Markus Dihlmann 18.11.2011
52 
53 reduced_data_subset = reduced_data;
54 
55 incl_derivative = 0;
56 
57 if isfield(reduced_data,'L_E_dd')
58  incl_derivative=1;%with derivative caclulation
59 end
60 
61 if incl_derivative
62 
63  nr_der = length(reduced_data.c0);
64 
65  if model.N > length(reduced_data.a0{1})
66  error('N too large for current size of reduced basis!');
67  end;
68  N = model.N;
69 
70  if isfield(model,'N_der')
71  N_der = model.N_der;
72  else
73  N_der = N.*ones(1,nr_der);
74  end
75  for i=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')
78  end
79  end
80 
81 
82  %normal fields
83  if isfield(reduced_data, 'a0')
84  reduced_data_subset.a0 = subblock_sequence(reduced_data.a0,1:N);
85  end
86  if isfield(reduced_data, 'LL_I')
87  reduced_data_subset.LL_I = subblock_sequence(reduced_data.LL_I,1:N,1:N);
88  end
89  if isfield(reduced_data, 'LL_E')
90  reduced_data_subset.LL_E = subblock_sequence(reduced_data.LL_E,1:N,1:N);
91  end
92  if isfield(reduced_data, 'bb')
93  reduced_data_subset.bb = subblock_sequence(reduced_data.bb,1:N);
94  end
95  if isfield(reduced_data, 'bb_I')
96  reduced_data_subset.bb_I = subblock_sequence(reduced_data.bb_I,1:N);
97  end
98  if isfield(reduced_data, 'M_E')
99  reduced_data_subset.M_E = subblock_sequence(reduced_data.M_E,1:N,1:N);
100  end
101  if isfield(reduced_data, 'M_b')
102  reduced_data_subset.M_b = subblock_sequence(reduced_data.M_b,1:N);
103  end
104  if isfield(reduced_data, 'M_EE')
105  reduced_data_subset.M_EE = subblock_sequence(reduced_data.M_EE,1:N,1:N);
106  end
107  if isfield(reduced_data, 'M_Eb')
108  reduced_data_subset.M_Eb = subblock_sequence(reduced_data.M_Eb,1:N);
109  end
110  if isfield(reduced_data, 'M_I')
111  reduced_data_subset.M_I = subblock_sequence(reduced_data.M_I,1:N,1:N);
112  end
113  if isfield(reduced_data, 'M_II')
114  reduced_data_subset.M_II = subblock_sequence(reduced_data.M_II,1:N,1:N);
115  end
116  if isfield(reduced_data, 'M_IE')
117  reduced_data_subset.M_IE = subblock_sequence(reduced_data.M_IE,1:N,1:N);
118  end
119  if isfield(reduced_data, 'M_Ib')
120  reduced_data_subset.M_Ib = subblock_sequence(reduced_data.M_Ib,1:N);
121  end
122 
123  %derivative fields
124 
125  if isfield(reduced_data,'c0')
126  reduced_data_subset.c0 = cell(1,nr_der);
127  for p=1:nr_der
128  reduced_data_subset.c0{p} = subblock_sequence(reduced_data.c0{p},1:N_der(p));
129  end
130  end
131  if isfield(reduced_data,'L_E_dd')
132  reduced_data_subset.L_E_dd = cell(1,nr_der);
133  for p=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));
135  end
136  end
137  if isfield(reduced_data,'L_I_dd')
138  reduced_data_subset.L_I_dd = cell(1,nr_der);
139  for p=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));
141  end
142  end
143  if isfield(reduced_data,'dL_E_sd')
144  reduced_data_subset.dL_E_sd = cell(1,nr_der);
145  for p=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);
147  end
148  end
149  if isfield(reduced_data,'dL_I_sd')
150  reduced_data_subset.dL_I_sd = cell(1,nr_der);
151  for p=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);
153  end
154  end
155  if isfield(reduced_data,'db')
156  reduced_data_subset.db = cell(1,nr_der);
157  for p=1:nr_der
158  reduced_data_subset.db{p} = subblock_sequence(reduced_data.db{p},1:N_der(p));
159  end
160  end
161  if isfield(reduced_data,'K_E')
162  reduced_data_subset.K_E = cell(1,nr_der);
163  for p=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));
165  end
166  end
167  if isfield(reduced_data,'K_I')
168  reduced_data_subset.K_I = cell(1,nr_der);
169  for p=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));
171  end
172  end
173  if isfield(reduced_data,'K_EE')
174  reduced_data_subset.K_EE = cell(1,nr_der);
175  for p=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));
177  end
178  end
179  if isfield(reduced_data,'K_II')
180  reduced_data_subset.K_II = cell(1,nr_der);
181  for p=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));
183  end
184  end
185  if isfield(reduced_data,'K_IE')
186  reduced_data_subset.K_IE = cell(1,nr_der);
187  for p=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));
189  end
190  end
191  if isfield(reduced_data,'K_EdEd')
192  reduced_data_subset.K_EdEd = cell(1,nr_der);
193  for p=1:nr_der
194  reduced_data_subset.K_EdEd{p} = subblock_sequence(reduced_data.K_EdEd{p},1:N,1:N);
195  end
196  end
197  if isfield(reduced_data,'K_IdId')
198  reduced_data_subset.K_IdId = cell(1,nr_der);
199  for p=1:nr_der
200  reduced_data_subset.K_IdId{p} = subblock_sequence(reduced_data.K_IdId{p},1:N,1:N);
201  end
202  end
203  if isfield(reduced_data,'K_Ed')
204  reduced_data_subset.K_Ed = cell(1,nr_der);
205  for p=1:nr_der
206  reduced_data_subset.K_Ed{p} = subblock_sequence(reduced_data.K_Ed{p},1:N,1:N_der(p));
207  end
208  end
209  if isfield(reduced_data,'K_Id')
210  reduced_data_subset.K_Id = cell(1,nr_der);
211  for p=1:nr_der
212  reduced_data_subset.K_Id{p} = subblock_sequence(reduced_data.K_Id{p},1:N_der(p),1:N);
213  end
214  end
215  if isfield(reduced_data,'K_bd')
216  reduced_data_subset.K_bd = cell(1,nr_der);
217  for p=1:nr_der
218  reduced_data_subset.K_bd{p} = subblock_sequence(reduced_data.K_bd{p},1:N_der(p));
219  end
220  end
221  if isfield(reduced_data,'K_IEd')
222  reduced_data_subset.K_IEd = cell(1,nr_der);
223  for p=1:nr_der
224  reduced_data_subset.K_IEd{p} = subblock_sequence(reduced_data.K_IEd{p},1:N_der(p),1:N);
225  end
226  end
227  if isfield(reduced_data,'K_IId')
228  reduced_data_subset.K_IId = cell(1,nr_der);
229  for p=1:nr_der
230  reduced_data_subset.K_IId{p} = subblock_sequence(reduced_data.K_IId{p},1:N_der(p),1:N);
231  end
232  end
233  if isfield(reduced_data,'K_Ibd')
234  reduced_data_subset.K_Ibd = cell(1,nr_der);
235  for p=1:nr_der
236  reduced_data_subset.K_Ibd{p} = subblock_sequence(reduced_data.K_Ibd{p},1:N_der(p));
237  end
238  end
239  if isfield(reduced_data,'K_EEd')
240  reduced_data_subset.K_EEd = cell(1,nr_der);
241  for p=1:nr_der
242  reduced_data_subset.K_EEd{p} = subblock_sequence(reduced_data.K_EEd{p},1:N_der(p),1:N);
243  end
244  end
245  if isfield(reduced_data,'K_EId')
246  reduced_data_subset.K_EId = cell(1,nr_der);
247  for p=1:nr_der
248  reduced_data_subset.K_EId{p} = subblock_sequence(reduced_data.K_EId{p},1:N_der(p),1:N);
249  end
250  end
251  if isfield(reduced_data,'K_Ebd')
252  reduced_data_subset.K_Ebd = cell(1,nr_der);
253  for p=1:nr_der
254  reduced_data_subset.K_Ebd{p} = subblock_sequence(reduced_data.K_Ebd{p},1:N_der(p));
255  end
256  end
257  if isfield(reduced_data,'K_EdId')
258  reduced_data_subset.K_EdId = cell(1,nr_der);
259  for p=1:nr_der
260  reduced_data_subset.K_EdId{p} = subblock_sequence(reduced_data.K_EdId{p},1:N,1:N);
261  end
262  end
263  if isfield(reduced_data,'K_Edbd')
264  reduced_data_subset.K_Edbd = cell(1,nr_der);
265  for p=1:nr_der
266  reduced_data_subset.K_Edbd{p} = subblock_sequence(reduced_data.K_Edbd{p},1:N);
267  end
268  end
269  if isfield(reduced_data,'K_Idbd')
270  reduced_data_subset.K_Idbd= cell(1,nr_der);
271  for p=1:nr_der
272  reduced_data_subset.K_Idbd{p} = subblock_sequence(reduced_data.K_Idbd{p},1:N);
273  end
274  end
275 
276 
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!');
281  end;
282  N = model.N;
283 
284  if isfield(reduced_data, 'a0')
285  reduced_data_subset.a0 = subblock_sequence(reduced_data.a0,1:N);
286  end
287  if isfield(reduced_data, 'LL_I')
288  reduced_data_subset.LL_I = subblock_sequence(reduced_data.LL_I,1:N,1:N);
289  end
290  if isfield(reduced_data, 'LL_E')
291  reduced_data_subset.LL_E = subblock_sequence(reduced_data.LL_E,1:N,1:N);
292  end
293  if isfield(reduced_data, 'bb')
294  reduced_data_subset.bb = subblock_sequence(reduced_data.bb,1:N);
295  end
296  if isfield(reduced_data, 'bb_I')
297  reduced_data_subset.bb_I = subblock_sequence(reduced_data.bb_I,1:N);
298  end
299  if isfield(reduced_data, 'M_E')
300  reduced_data_subset.M_E = subblock_sequence(reduced_data.M_E,1:N,1:N);
301  end
302  if isfield(reduced_data, 'M_b')
303  reduced_data_subset.M_b = subblock_sequence(reduced_data.M_b,1:N);
304  end
305  if isfield(reduced_data, 'M_EE')
306  reduced_data_subset.M_EE = subblock_sequence(reduced_data.M_EE,1:N,1:N);
307  end
308  if isfield(reduced_data, 'M_Eb')
309  reduced_data_subset.M_Eb = subblock_sequence(reduced_data.M_Eb,1:N);
310  end
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);
314 % end
315  if isfield(reduced_data, 'M_I')
316  reduced_data_subset.M_I = subblock_sequence(reduced_data.M_I,1:N,1:N);
317  end
318  if isfield(reduced_data, 'M_II')
319  reduced_data_subset.M_II = subblock_sequence(reduced_data.M_II,1:N,1:N);
320  end
321  if isfield(reduced_data, 'M_IE')
322  reduced_data_subset.M_IE = subblock_sequence(reduced_data.M_IE,1:N,1:N);
323  end
324  if isfield(reduced_data, 'M_Ib')
325  reduced_data_subset.M_Ib = subblock_sequence(reduced_data.M_Ib,1:N);
326  end
327  if isfield(reduced_data, 'M_EdEd')
328  reduced_data_subset.M_EdEd = subblock_sequence(reduced_data.M_EdEd,1:N,1:N);
329  end
330  if isfield(reduced_data, 'M_IdId')
331  reduced_data_subset.M_IdId = subblock_sequence(reduced_data.M_IdId,1:N,1:N);
332  end
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);
336 % end
337  if isfield(reduced_data, 'M_Ed')
338  reduced_data_subset.M_Ed = subblock_sequence(reduced_data.M_Ed,1:N,1:N);
339  end
340  if isfield(reduced_data, 'M_Id')
341  reduced_data_subset.M_Id = subblock_sequence(reduced_data.M_Id,1:N,1:N);
342  end
343  if isfield(reduced_data, 'M_bd')
344  reduced_data_subset.M_bd = subblock_sequence(reduced_data.M_bd,1:N);
345  end
346  if isfield(reduced_data, 'M_IEd')
347  reduced_data_subset.M_IEd = subblock_sequence(reduced_data.M_IEd,1:N,1:N);
348  end
349  if isfield(reduced_data, 'M_IId')
350  reduced_data_subset.M_IId = subblock_sequence(reduced_data.M_IId,1:N,1:N);
351  end
352  if isfield(reduced_data, 'M_Ibd')
353  reduced_data_subset.M_Ibd = subblock_sequence(reduced_data.M_Ibd,1:N);
354  end
355  if isfield(reduced_data, 'M_EEd')
356  reduced_data_subset.M_EEd = subblock_sequence(reduced_data.M_EEd,1:N,1:N);
357  end
358  if isfield(reduced_data, 'M_EId')
359  reduced_data_subset.M_EId = subblock_sequence(reduced_data.M_EId,1:N,1:N);
360  end
361  if isfield(reduced_data, 'M_Ebd')
362  reduced_data_subset.M_Ebd = subblock_sequence(reduced_data.M_Ebd,1:N);
363  end
364  if isfield(reduced_data, 'M_EdId')
365  reduced_data_subset.M_EdId = subblock_sequence(reduced_data.M_EdId,1:N,1:N);
366  end
367  if isfield(reduced_data, 'M_Edbd')
368  reduced_data_subset.M_Edbd = subblock_sequence(reduced_data.M_Edbd,1:N);
369  end
370  if isfield(reduced_data, 'M_Idbd')
371  reduced_data_subset.M_Idbd = subblock_sequence(reduced_data.M_Idbd,1:N);
372  end
373 
374 
375 end
376 
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;
381  end
382  if incl_derivative
383  reduced_data_subset.s_RB_der = cell(1,nr_der);
384  for p=1:nr_der
385  reduced_data_subset.s_RB_der{p} = reduced_data.s_RB_der{p}(1:N_der(p));
386  end
387  end
388 
389  end;
390 
391  reduced_data_subset.N = N;
392  if incl_derivative
393  reduced_data_subset.N_der = N_der;
394  end
395 
396 
397 
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...