1 function [B_0,B_G] = dom_dec_PCA_fixspace(X,XFix_0,XFix_G,A,A_G, ...
2 gamma_dofs,PCA_modes,epsilon)
3 %
function [B_0,B_G] = dom_dec_PCA_fixspace(X,XFix_0,XFix_G,A,A_G, ...
4 % gamma_dofs,PCA_modes,epsilon)
6 % computing PCA fixspaces according to schema 2
for the RB
10 % B_0: extension
for `X_{N,2}^0`
11 % B_G: extension
for `X_{N,2}^G`
16 X = PCA_fixspace(X,[XFix_0,XFix_G],A,PCA_modes,[],epsilon);
18 % orthonormalize XFix_G with respect to L2-Gamma inner product
20 A_GG = sparse(A_G(gamma_dofs,gamma_dofs));
25 for i = 1:(size(XFix_G,2)-1)
26 for j = (i+1):size(XFix_G,2)
27 if isequal(XFix_G(:,i),XFix_G(:,j))
35 R_M = ichol(A_GG, opts);
36 [~,R,E] = qr(R_M * XFix_G(gamma_dofs,:),0);
39 ind = find(abs(diag(R))>epsilon);
41 XFix_G = XFix_G(:,ind);
43 XFix_G = XFix_G(:,ind) / Rind;
48 % separate RB_0, RB_G extension
50 Xo = X - XFix_G * (XFix_G' * A_G * X);
56 K = Xo(gamma_dofs,:)' * A_GG * Xo(gamma_dofs,:);
63 fi_G = find(abs(evalues)>=epsilon);
64 fi_0 = find(abs(evalues)<epsilon);
66 B_0 = Xo * ep(:,fi_0);
72 B_0(gamma_dofs,:) = 0;
74 % compute pod-extension
75 B_0 = PCA_fixspace(B_0,XFix_0,A,[],[],epsilon);