rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
stokes_reduced_data_subset.m
1 function reduced_data_subset = stokes_reduced_data_subset(model, reduced_data)
2 %function reduced_data_subset = stokes_reduced_data_subset(model, reduced_data)
3 %
4 % copying ...
5 % switch to lin_stat_ .. later ?
6 
7 
8 reduced_data_subset = reduced_data;
9 
10 if reduced_data.N ~= model.N
11 
12  % extract correct N-sized submatrices and subvectors from reduced_data
13  if model.N > reduced_data.N
14  error('N too large for current size of reduced basis!');
15  end
16 
17  N = model.N;
18 
19  if strcmp(model.RB_error_indicator, 'estimator') && model.has_nonlinearity
20  error('stokes:reduced_data_subset:this is not supported.');
21  % residual components are to be computed again.
22  end
23 
24  if isfield(reduced_data, 'AN_comp')
25  reduced_data_subset.AN_comp = ...
26  subblock_sequence(reduced_data.AN_comp, 1:N, 1:N);
27  end
28 
29  if isfield(reduced_data, 'fN_comp')
30  reduced_data_subset.fN_comp = subblock_sequence(reduced_data.fN_comp, 1:N);
31  end
32 
33  if isfield(reduced_data, 'KN')
34  reduced_data_subset.KN = reduced_data.KN(1:N, 1:N);
35  end
36 
37  Q_f = length(reduced_data_subset.fN_comp);
38  Q_a = length(reduced_data_subset.AN_comp);
39  ind = reduced_data.res_onb_ind < (Q_f+N*Q_a);
40  reduced_data_subset.G = reduced_data.G(ind,1:(Q_f+N*Q_a));
41 
42  reduced_data_subset.N = N;
43 
44 end