1 function RBext_G = dom_dec_RB_extension_eigenbasis(model, ...
3 %
function RBext_G = dom_dec_RB_extension_eigenbasis(model, ...
9 no_dir = mod(model.dirichlet_side,2)+1;
11 [RB_0,RB_G] = model.get_rb_from_detailed_data(detailed_data);
16 A = detailed_data.harm_ext_matrices;
17 G = detailed_data.gamma_inner_product_matrices;
18 g_dofs = detailed_data.gamma_dofs;
21 G{i} = G{i}(g_dofs{no_dir},g_dofs{no_dir});
24 if (size(RB_G{no_dir},2) > 0)
25 % compute orthonormalized
interface bases
27 RB_GG = orthonormalize(RB_G{no_dir}(g_dofs{no_dir},:),G{1},[],
'qr');
31 % compute orthogonal complement
32 RB_GG_compl = eye(length(g_dofs{no_dir})) - ...
33 RB_GG * (RB_GG
' * G{1});
36 % eliminate linear dependent modes
37 RB_GG_compl = orthonormalize(RB_GG_compl,G{1},[],'qr
');
39 % solve generalized eigenvalue problem
40 [ep,vp] = eig(RB_GG_compl' * G{2} * RB_GG_compl,...
41 eye(size(RB_GG_compl,2)));
45 [evalues,indices] = sort(evalues,1,
'ascend');
46 RBext_GG = RB_GG_compl * ep(:,indices);
49 % ............. see below
50 [ep,vp] = eig(G{2},G{1});
54 % important modes correspond to small eigenvalues ???????
55 [evalues,indices] = sort(evalues,1,
'ascend');
56 RBext_GG = ep(:,indices);
60 % harmonic extensions (XNG1, XNG2)
62 zeroExt = zeros(detailed_data.df_infos{i}.ndofs, ...
64 zeroExt(g_dofs{i},:) = RBext_GG;
65 RBext_G{i} = A{i}\zeroExt;