2 %% The following works, but results in slow linear combination
3 %reduced_data= lin_stat_gen_reduced_data(model,detailed_data);
5 % later: different saving of error-estimator riesz-representers such that
6 % simple multiplication with f and a coefficient vectors is possible
8 % instead: refinement of lin-stat-gen-reduced-data:
10 old_mode = model.decomp_mode;
11 model.decomp_mode = 1; % == components
12 [A_comp,f_comp] = model.operators(model,detailed_data);
18 reduced_data.AN_comp = cell(1,length(A_comp));
20 reduced_data.AN_comp{q} = ...
21 detailed_data.RB
'*A_comp{q}*detailed_data.RB;
24 reduced_data.fN_comp = cell(1,length(f_comp));
26 reduced_data.fN_comp{q} = ...
27 detailed_data.RB' * f_comp{q};
30 if model.compute_output_functional
31 % assumption: nonparametic output functional, then simple RB
34 model.operators_output(model,detailed_data);
36 reduced_data.lN_comp = cell(1,Q_l);
38 reduced_data.lN_comp{q} = detailed_data.RB
' * l_comp{q};
42 N = model.get_rb_size(model,detailed_data);
45 % plus error estimation quantities
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];
51 % (v_f^q,v_f^q') = v_f^q
' * K * v_f^q
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
58 %v_f = zeros(size(detailed_data.RB,1),Qf);
59 K_v_f = zeros(size(detailed_data.RB,1),Qf);
61 K_v_f(:,q) = f_comp{q};
63 % v_f(:,q) = K \ f_comp{q};
69 K_v_a{n} = zeros(size(K,1),Qa);
70 v_a{n} = zeros(size(K,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);
78 % finally assemble G = [G_ff, G_fa{n}; G_fa{n}', G_aa{n}];
81 %%G(1:Qf,1:Qf) = reduced_data.Gff;
82 %G(1:Qf,1:Qf) = v_f
' * K_v_f;
84 % G(1:Qf,Qf+(n-1)*Qa +(1:Qa)) = ...
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}';
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};
99 % assemble Qf x Qf matrix Hff = (<vf1,vf1>, ... ,<vf1,vfQf>)
101 % (<vfQf,vf1>, ... ,<vfQf,vfQf>)
102 reduced_data.bar_Hff = v_f' * K_v_f;
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>)
108 % <vf1,vaN1>...<vf1,vaNQa> | <vf2,vaN1> ... <vf2,vaNQa> | ... <vfQf,vaNQa>)
109 Haf = zeros(N,Qa * Qf);
112 % insert row vector in block matrix:
113 vaf = v_f
' * K_v_a{n};
115 % vaf = v_f(:,q)' * K_v_a{n};
116 % Haf(n,(1+(q-1)*Qa):(q*Qa)) = vaf;
119 reduced_data.bar_Haf = Haf;
121 % assemble N^2 x Qa^2 matrix
122 % Haa = (<va11,va11>...<va11,va1Qa> | <va12,va11> ... <va12,va1Qa> | <va1Qa,va11>... <va1Qa,va1Qa>)
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>
128 % <vaN1,va21>...<vaN1,va2Qa> | <vaN2,va21> ... <vaN2,va2Qa> | <vaNQa,va21>... <vaNQa,va2Qa>)
129 % -------------------------------------------------------------------------------------------
131 % -------------------------------------------------------------------------------------------
132 % <va11,vaN1>...<va11,vaNQa> | <va12,vaN1> ... <va12,vaNQa> | <va1Qa,vaN1>... <va1Qa,vaNQa>
134 % <vaN1,vaN1>...<vaN1,vaNQa> | <vaN2,vaN1> ... <vaN2,vaNQa> | <vaNQa,vaN1>... <vaNQa,vaNQa> )
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;
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;
154 reduced_data.used_dictionary_gen_reduced_data = 1;
155 % set back old model mode
156 model.decomp_mode = old_mode;
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...