rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
dictionary_gen_reduced_data.m
Go to the documentation of this file.
1 function reduced_data = dictionary_gen_reduced_data(model,detailed_data)
2 %% The following works, but results in slow linear combination
3 %reduced_data= lin_stat_gen_reduced_data(model,detailed_data);
4 %
5 % later: different saving of error-estimator riesz-representers such that
6 % simple multiplication with f and a coefficient vectors is possible
7 %
8 % instead: refinement of lin-stat-gen-reduced-data:
9 reduced_data = [];
10 old_mode = model.decomp_mode;
11 model.decomp_mode = 1; % == components
12 [A_comp,f_comp] = model.operators(model,detailed_data);
13 Qa = length(A_comp);
14 reduced_data.Qa = Qa;
15 Qf = length(f_comp);
16 reduced_data.Qf = Qf;
17 
18 reduced_data.AN_comp = cell(1,length(A_comp));
19 for q = 1:Qa
20  reduced_data.AN_comp{q} = ...
21  detailed_data.RB'*A_comp{q}*detailed_data.RB;
22 end;
23 
24 reduced_data.fN_comp = cell(1,length(f_comp));
25 for q = 1:Qf
26  reduced_data.fN_comp{q} = ...
27  detailed_data.RB' * f_comp{q};
28 end;
29 
30 if model.compute_output_functional
31  % assumption: nonparametic output functional, then simple RB
32  % evaluation possible
33  l_comp = ...
34  model.operators_output(model,detailed_data);
35  Q_l = length(l_comp);
36  reduced_data.lN_comp = cell(1,Q_l);
37  for q = 1:Q_l
38  reduced_data.lN_comp{q} = detailed_data.RB' * l_comp{q};
39  end;
40 end;
41 
42 N = model.get_rb_size(model,detailed_data);
43 reduced_data.N = N;
44 
45 % plus error estimation quantities
46 
47 % G = (v_r^q, v_r^q) = v_r^q' * K * v_r^q
48 % with {v_r^q}_q = (v_f^q, v_a^qq')_{qq'}
49 % G = [Gff, Gfa; Gfa', Gaa];
50 %
51 % (v_f^q,v_f^q') = v_f^q' * K * v_f^q
52 
53 % matrices of coefficient vectors of Riesz-representers:
54 % K * v_f^q = f^q (coefficient vector equations)
55 K = model.get_inner_product_matrix(detailed_data);
56 % search solution in H10, i.e. set dirichlet DOFs
57 
58 %v_f = zeros(size(detailed_data.RB,1),Qf);
59 K_v_f = zeros(size(detailed_data.RB,1),Qf);
60 for q = 1:Qf
61  K_v_f(:,q) = f_comp{q};
62  v_f = K \ K_v_f;
63  % v_f(:,q) = K \ f_comp{q};
64 end;
65 
66 v_a = cell(N,1);
67 K_v_a = cell(N,1);
68 for n = 1:N
69  K_v_a{n} = zeros(size(K,1),Qa);
70  v_a{n} = zeros(size(K,1),Qa);
71  for q = 1:Qa
72  K_v_a{n}(:,q) = (A_comp{q}*detailed_data.RB(:,n));
73  v_a{n} = K \ K_v_a{n};
74  % v_a{n}(:,q) = K \ K_v_a{n}(:,q);
75  end;
76 end;
77 
78 % finally assemble G = [G_ff, G_fa{n}; G_fa{n}', G_aa{n}];
79 %Q_r = Qf + N * Qa;
80 %G = zeros(Q_r,Q_r);
81 %%G(1:Qf,1:Qf) = reduced_data.Gff;
82 %G(1:Qf,1:Qf) = v_f' * K_v_f;
83 %for n = 1:N
84 % G(1:Qf,Qf+(n-1)*Qa +(1:Qa)) = ...
85 % v_f' * K_v_a{n};
86 % % reduced_data.Gfa{n};
87 % G(Qf+(n-1)*Qa +(1:Qa),1:Qf) = ...
88 % transpose(v_f' * K_v_a{n});
89 % % reduced_data.Gfa{n}';
90 %end;
91 %for n1 = 1:N
92 % for n2 = 1:N
93 % G(Qf+(n1-1)*Qa+(1:Qa),Qf+(n2-1)*Qa +(1:Qa)) = ...
94 % v_a{n1}' * K_v_a{n2};
95 % % reduced_data.Gaa{n1,n2};
96 % end;
97 %end;
98 
99 % assemble Qf x Qf matrix Hff = (<vf1,vf1>, ... ,<vf1,vfQf>)
100 % .........
101 % (<vfQf,vf1>, ... ,<vfQf,vfQf>)
102 reduced_data.bar_Hff = v_f' * K_v_f;
103 
104 % assemble N x QaQf matrix
105 % Haf = (<vf1,va11>...<vf1,va1Qa> | <vf2,va11> ... <vf2,va1Qa> | ... <vfQf,va1Qa>)
106 % <vf1,va21>...<vf1,va2Qa> | <vf2,va21> ... <vf2,va2Qa> | ... <vfQf,va2Qa>)
107 % ............
108 % <vf1,vaN1>...<vf1,vaNQa> | <vf2,vaN1> ... <vf2,vaNQa> | ... <vfQf,vaNQa>)
109 Haf = zeros(N,Qa * Qf);
110 for n = 1:N
111  for q = 1:Qf
112  % insert row vector in block matrix:
113  vaf = v_f' * K_v_a{n};
114  Haf(n,:) = vaf;
115 % vaf = v_f(:,q)' * K_v_a{n};
116 % Haf(n,(1+(q-1)*Qa):(q*Qa)) = vaf;
117  end;
118 end;
119 reduced_data.bar_Haf = Haf;
120 
121 % assemble N^2 x Qa^2 matrix
122 % Haa = (<va11,va11>...<va11,va1Qa> | <va12,va11> ... <va12,va1Qa> | <va1Qa,va11>... <va1Qa,va1Qa>)
123 % ............
124 % <vaN1,va11>...<vaN1,va1Qa> | <vaN2,va11> ... <vaN2,va1Qa> | <vaNQa,va11>... <vaNQa,va1Qa>)
125 % -------------------------------------------------------------------------------------------
126 % <va11,va21>...<va11,va2Qa> | <va12,va21> ... <va12,va2Qa> | <va1Qa,va21>... <va1Qa,va2Qa>
127 % ............
128 % <vaN1,va21>...<vaN1,va2Qa> | <vaN2,va21> ... <vaN2,va2Qa> | <vaNQa,va21>... <vaNQa,va2Qa>)
129 % -------------------------------------------------------------------------------------------
130 % ............
131 % -------------------------------------------------------------------------------------------
132 % <va11,vaN1>...<va11,vaNQa> | <va12,vaN1> ... <va12,vaNQa> | <va1Qa,vaN1>... <va1Qa,vaNQa>
133 % ............
134 % <vaN1,vaN1>...<vaN1,vaNQa> | <vaN2,vaN1> ... <vaN2,vaNQa> | <vaNQa,vaN1>... <vaNQa,vaNQa> )
135 
136 Haa = zeros(N*N,Qa*Qa);
137 % insert row vectors in block matrix:
138 for n1 = 1:N % loop over block-rows
139  for n2 = 1:N % loop over rows within one block;
140  vaa = v_a{n2}' * K_v_a{n1};
141  Haa((n1-1)*N + n2, :) = vaa(:);
142 % vaa = v_a{n2}(:,q)' * K_v_a{n1};
143 % Haa((n1-1)*N + n2, (1+(q-1)*Qa):q*Qa) = vaa;
144  end;
145 end;
146 
147 reduced_data.bar_Haa = Haa;
148 reduced_data.bar_Haf = Haf;
149 reduced_data.K_v_a = K_v_a;
150 reduced_data.v_a = v_a;
151 reduced_data.K_v_f = K_v_f;
152 reduced_data.v_f = v_f;
153 
154 reduced_data.used_dictionary_gen_reduced_data = 1;
155 % set back old model mode
156 model.decomp_mode = old_mode;
157 
function reduced_data = dictionary_gen_reduced_data(model, detailed_data)
% The following works, but results in slow linear combination reduced_data= lin_stat_gen_reduced_data...