rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
comsol_RB_extension_greedy_lin_stat.m
1 function [RBext,par_dummy] = comsol_RB_extension_greedy_lin_stat(model,detailed_data)
2 %function [RBext,par_dummy] = RB_extension_simple_greedy_lin_stat_comsol(model,detailed_data)
3 %
4 % this function is needed for the greedy-algorithm for stationary functions.
5 % It returns an orthonormalized basis function
6 %
7 % Oliver Zeeb, 18.09.2012
8 
9 par_dummy=[];
10 
11 %allgemeiner:
12 sim_data=detailed_simulation(model,detailed_data);
13 RBext = model.get_dofs_from_sim_data(sim_data);
14 
15 % orthonormalize new basis vector
16 InProd_matrix = model.get_inner_product_matrix(detailed_data);
17 Uproj = RBext - ...
18  detailed_data.RB * (detailed_data.RB' * InProd_matrix * ...
19  RBext); %projection
20 norm_Uproj = sqrt(max(Uproj'*InProd_matrix*Uproj,0)); %norm
21 if norm_Uproj > 1e-10
22  % if nonzero projection error -> end with new snapshot
23  Uproj = Uproj/norm_Uproj;
24 else
25  % due to scaling, no precise orthonormalization is obtained. So perform
26  % explicit orthonormalization
27  RBtmp = orthonormalize([detailed_data.RB,Uproj],InProd_matrix);
28  if size(RBtmp,2)> size(detailed_data.RB,2)
29  Uproj = RBtmp(:,end);
30  else
31  error('accuracy problem, should not reach this point!!');
32  end;
33 end;
34 
35 %return orthonormalized basis vector
36 RBext=Uproj;
37