rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
dom_dec_PCA_fixspace.m
Go to the documentation of this file.
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)
5 % Function computing PCA fixspaces according to schema 2 for the RB
6 % extension
7 %
8 % Return values:
9 % B_0: extension for `X_{N,2}^0`
10 % B_G: extension for `X_{N,2}^G`
11 
12 % I.Maier 19.07.2011
13 
14 % compute pca modes
15 X = PCA_fixspace(X,[XFix_0,XFix_G],A,PCA_modes,[],epsilon);
16 
17 % orthonormalize XFix_G with respect to L2-Gamma inner product
18 
19 A_GG = sparse(A_G(gamma_dofs,gamma_dofs));
20 
21 if isempty(XFix_G)
22  XFix_G = [];
23 else
24  for i = 1:(size(XFix_G,2)-1)
25  for j = (i+1):size(XFix_G,2)
26  if isequal(XFix_G(:,i),XFix_G(:,j))
27  XFix_G(:,j) = 0;
28  end;
29  end;
30  end;
31 
32  opts.shape = 'upper';
33  opts.type = 'ict';
34  R_M = ichol(A_GG, opts);
35  [~,R,E] = qr(R_M * XFix_G(gamma_dofs,:),0);
36  XFix_G = XFix_G(:,E);
37 
38  ind = find(abs(diag(R))>epsilon);
39  if ~isempty(ind)
40  XFix_G = XFix_G(:,ind);
41  Rind = R(ind,ind);
42  XFix_G = XFix_G(:,ind) / Rind;
43  end;
44 
45 end;
46 
47 % separate RB_0, RB_G extension
48 if ~isempty(XFix_G)
49  Xo = X - XFix_G * (XFix_G' * A_G * X);
50 else
51  Xo = X;
52 end;
53 clear('A_G');
54 
55 K = Xo(gamma_dofs,:)' * A_GG * Xo(gamma_dofs,:);
56 K = 0.5*(K + K');
57 clear('A_GG');
58 
59 [ep,vp] = eigs(K);
60 evalues = diag(vp);
61 
62 fi_G = find(abs(evalues)>=epsilon);
63 fi_0 = find(abs(evalues)<epsilon);
64 
65 B_0 = Xo * ep(:,fi_0);
66 B_G = X * ep(:,fi_G);
67 
68 clear('X');
69 clear('Xo');
70 
71 B_0(gamma_dofs,:) = 0;
72 
73 % compute pod-extension
74 B_0 = PCA_fixspace(B_0,XFix_0,A,[],[],epsilon);
function [ B_0 , B_G ] = dom_dec_PCA_fixspace(X, XFix_0, XFix_G, A, A_G, gamma_dofs, PCA_modes, epsilon)
Function computing PCA fixspaces according to schema 2 for the RB extension.