rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
dom_dec_RB_extension_PCA_fixspace.m
1 function [RBext_0,RBext_G] = dom_dec_RB_extension_PCA_fixspace(...
2  model,detailed_data)
3 %function [RBext_0,RBext_G] = dom_dec_RB_extension_PCA_fixspace(...
4 % model,detailed_data)
5 %
6 
7 % I.Maier 23.08.2011
8 
9 dir = model.dirichlet_side;
10 no_dir = mod(dir,2)+1;
11 
12 [RB_0,RB_G] = model.get_rb_from_detailed_data(detailed_data);
13 
14 RBext_0 = cell(1,2);
15 RBext_G = cell(1,2);
16 
17 K = model.get_inner_product_matrices(detailed_data);
18 G = detailed_data.gamma_inner_product_matrices;
19 A = detailed_data.mu_ref_extension_matrices;
20 g_dofs = detailed_data.gamma_dofs;
21 
22 epsilon = model.RB_generation_epsilon;
23 PCA_modes = model.RB_extension_PCA_modes;
24 
25 % detailed simulation
26 sim_data = detailed_simulation(model,detailed_data);
27 if sim_data.reached_maxiter
28  warning('detailed simulation may have diverged!');
29 end;
30 % dof matrizes depend on model.sequence_mode
31 U = model.get_dofs_from_sim_data(model,sim_data);
32 U_0 = cell(1,2);
33 
34 for j = 1:2
35  zeroExt = zeros(size(U{j}));
36  zeroExt(g_dofs{j},:) = U{j}(g_dofs{j},:);
37  U_0{j} = U{j} - A{j}\zeroExt;
38 end;
39 
40 
41 switch model.RB_extension_method
42 
43  case 'A'
44 
45  %%%%%%%%%%%%%%%% method 1 %%%%%%%%%%%%%%%%%%
46 
47  % XN10, XN20
48  for i = 1:2
49  RBext_0{i} = PCA_fixspace(U_0{i},RB_0{i},K{i},PCA_modes,[], ...
50  epsilon);
51  end;
52 
53  % XNG
54  if size(RB_G{no_dir},2) == 0
55  RB_GG = [];
56  else
57  RB_GG = RB_G{no_dir}(g_dofs{no_dir},:);
58  end;
59 
60  RBext_GG = PCA_fixspace([U{dir}(g_dofs{dir},:), ...
61  U{no_dir}(g_dofs{no_dir},:)], ...
62  RB_GG,G{1}(g_dofs{no_dir}, ...
63  g_dofs{no_dir}), ...
64  PCA_modes,[],epsilon);
65  clear('RB_GG');
66 
67  % XN1G, XN2G
68  for i = 1:2
69  zeroExt = zeros(detailed_data.df_infos{i}.ndofs, ...
70  size(RBext_GG,2));
71  zeroExt(g_dofs{i},:) = RBext_GG;
72  RBext_G{i} = [RBext_G{i}, A{i}\zeroExt];
73  end;
74 
75 
76  case 'B'
77 
78  %%%%%%%%%%%%%%%%%% method 2 %%%%%%%%%%%%%%%%%
79 
80  %%% XN10
81  RBext_0{dir} = PCA_fixspace(U_0{dir},RB_0{dir},K{dir},PCA_modes, ...
82  [],epsilon);
83 
84  %%%% XN20, XN2G
85  [RBext_0{no_dir},RBext_G{no_dir}] = ...
86  dom_dec_PCA_fixspace(U{no_dir},RB_0{no_dir},RB_G{no_dir}, ...
87  K{no_dir},G{1},g_dofs{no_dir}, ...
88  PCA_modes,epsilon);
89 
90  %%%% XN1G
91  if size(RBext_G{no_dir},2) > 0
92  zeroExt = zeros(detailed_data.df_infos{dir}.ndofs, ...
93  size(RBext_G{no_dir},2));
94  zeroExt(g_dofs{dir},:) = RBext_G{no_dir}(g_dofs{no_dir},:);
95  RBext_G{dir} = A{dir}\zeroExt;
96  end;
97 
98 
99 end;
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.