rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
rb_reconstruction_dictionary.m
1 function rb_sim_data = rb_reconstruction_dictionary(model, RB_dict,rb_sim_data)%dict_extracted_reduced_data , rb_sim_data)
2 %function rb_sim_data = rb_reconstruction_dictionary(model_data, detailed_data, rb_sim_data)
3 %
4 % function computing a detailed reconstruction by linear
5 % combination of the coefficients in the simulation data with the
6 % reduced basis vector extracted from the dicitonary.
7 % The sensitivity derivative solution is also reconstructed. Either using
8 % the common reduced basis or separte derivative information reduced bases.
9 %
10 % Required fields of RB_dict:
11 % Phi: The dictionary reduced basis
12 %
13 % Optional fields of RB_dict:
14 % Phi_der: The basis for derivative information in the dictionary
15 %
16 % Required fileds in dict_extracted_reduced_data:
17 % extraction_vector: Vector containing the indices of elements extracted
18 % for rb_simulation.
19 %
20 % Required fields of rb_sim_data:
21 % a: The coefficient vector from rb_simulation.
22 %
23 
24 % Markus Dihlmann 30.10.2011
25 
26 RB = [RB_dict.init_base,RB_dict.Phi];
27 RB = RB(:,rb_sim_data.extraction_vector);
28 rb_sim_data.U = RB * rb_sim_data.a;
29 
30 if model.compute_derivative_info
31  if ~isfield(RB_dict,'Phi_der')
32  for i = 1:size(rb_sim_data.c,3)
33  rb_sim_data.U_der(:,:,i) = RB* rb_sim_data.c(:,:,i);
34  end
35  else
36  indx_mu=find(model.optimization.params_to_optimize);
37  for i = 1:sum(model.optimization.params_to_optimize)
38  RB_der = [RB_dict.init_base, RB_dict.Phi_der{indx_mu(i)}];
39  rb_sim_data.U_der(:,:,i) = RB_der(:,dict_extracted_reduced_data.extraction_vector) * rb_sim_data.c{i}(:,:);
40  end
41  end
42 end
43 %calculate output
44 model.decomp_mode=0;
45 v = model.operators_output(model,RB_dict);
46  rb_sim_data.output = (v(:)') * rb_sim_data.U;
47  if model.compute_derivative_info
48  for i=1:size(rb_sim_data.U_der,3)
49  rb_sim_data.output_derivative(:,i) = (v(:)') * rb_sim_data.U_der(:,:,i);
50  end
51  end
52 
53