1 function [RBext_0,RBext_G] = dom_dec_RB_extension_PCA_fixspace(...
3 %
function [RBext_0,RBext_G] = dom_dec_RB_extension_PCA_fixspace(...
9 dir = model.dirichlet_side;
10 no_dir = mod(dir,2)+1;
12 [RB_0,RB_G] = model.get_rb_from_detailed_data(detailed_data);
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;
22 epsilon = model.RB_generation_epsilon;
23 PCA_modes = model.RB_extension_PCA_modes;
26 sim_data = detailed_simulation(model,detailed_data);
27 if sim_data.reached_maxiter
28 warning(
'detailed simulation may have diverged!');
30 % dof matrizes depend on model.sequence_mode
31 U = model.get_dofs_from_sim_data(model,sim_data);
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;
41 switch model.RB_extension_method
45 %%%%%%%%%%%%%%%% method 1 %%%%%%%%%%%%%%%%%%
49 RBext_0{i} = PCA_fixspace(U_0{i},RB_0{i},K{i},PCA_modes,[], ...
54 if size(RB_G{no_dir},2) == 0
57 RB_GG = RB_G{no_dir}(g_dofs{no_dir},:);
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}, ...
64 PCA_modes,[],epsilon);
69 zeroExt = zeros(detailed_data.df_infos{i}.ndofs, ...
71 zeroExt(g_dofs{i},:) = RBext_GG;
72 RBext_G{i} = [RBext_G{i}, A{i}\zeroExt];
78 %%%%%%%%%%%%%%%%%% method 2 %%%%%%%%%%%%%%%%%
81 RBext_0{dir} = PCA_fixspace(U_0{dir},RB_0{dir},K{dir},PCA_modes, ...
85 [RBext_0{no_dir},RBext_G{no_dir}] = ...
87 K{no_dir},G{1},g_dofs{no_dir}, ...
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;
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.