rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
lin_evol_opt_gen_detailed_data_separate_bases.m
Go to the documentation of this file.
1 function detailed_data = lin_evol_opt_gen_detailed_data_separate_bases(model, model_data)
2 %function detailed_data =
4 %
5 % function generating the detailed data for models with sensitivity
6 % derivatives. Separate bases for the approximation of the solution and the
7 % derivatives are generated.
8 %
9 %
10 % Optional fields of model:
11 %
12 %
13 % Optional fields of model_data:
14 % RB: If a RB is given, this RB is extended
15 %
16 % Generated fields of detailed_data:
17 % RB: The reduced bases for the solution
18 % RB_der: cell array with thr reduced bases for the derivative solution
19 % RB_info: Usual info field
20 % RB_der_info: cell array containing the RBinfo for the derivative
21 % reduced bases
22 %
23 
24 % Markus Dihlmann 31.03.2011
25 
26 %get number of parameters to know how many derivative_rb have to be
27 %generated
28 nr_parameters = length(get_mu(model));
29 
30 Nmax = model.RB_stop_Nmax;
31 epsilon_tol = model.RB_stop_epsilon;
32 % check some fields in model
33 if isfield(model,'RB_mixed_sensitivity_basis_generation')
34  if model.RB_mixed_sensitivity_basis_generation
35  disp('Warning: The field model.RB_mixed_sensitivity_basis_generation is probably set to the wrong value');
36  model.RB_mixed_sensitivity_basis_generation=0;
37  end
38 end
39 
40 
41 %1. start generating a normal reduced basis
42 %-----------------------------------------
43 compute_derivative_info_old = model.compute_derivative_info;
44 model.compute_derivative_info =0;
45 if isfield(model,'base_model')&&isfield(model.base_model,'compute_derivative_info')
46  model.base_model.compute_derivative_info = 0;
47 end
48 
49 %set fields, so that the error and the dofs of the solution is returned
50 model.get_estimator_from_sim_data = @(sim_data)get_estimator_from_sim_data_mixed(sim_data,0);
51 model.get_dofs_from_sim_data = @(sim_data)get_dofs_from_sim_data_for_sensitivity_extension(sim_data,0);
52 model.get_rb_size = @(model, detailed_data)lin_evol_opt_get_rb_size(model, detailed_data,0);
53 
54 if isfield(model,'RB_solution_Nmax')
55  model.RB_stop_Nmax=model.RB_solution_Nmax;
56 else
57  model.RB_stop_Nmax = 2*Nmax;
58 end
59 if isfield(model,'RB_solution_epsilon')
60  model.RB_stop_epsilon = model.RB_solution_epsilon;
61 else
62  model.RB_stop_epsilon = epsilon_tol/10;
63 end
64 
65 detailed_data = lin_evol_gen_detailed_data(model, model_data);
66 RB_finished = detailed_data.RB;
67 RB_info = detailed_data.RB_info;
68 model_data.RB = RB_finished;
69 %filecache_clear;
70 
71 %2. generate a reduced basis for every derivative in a loop
72 %-----------------------------------------------------------
73 model.RB_stop_Nmax = Nmax;
74 model.RB_stop_epsilon = epsilon_tol;
75 model.compute_derivative_info =1;
76 if isfield(model,'base_model')&&isfield(model.base_model,'compute_derivative_info')
77  model.base_model.compute_derivative_info = 1;
78 end
79 if ~isfield(model_data,'RB_der_info')
80  RB_der_info = cell(1,nr_parameters);
81 end
82 %RB_der = cell(1,nr_parameters);
83 %compute_derivative_indices_old=model.compute_derivative_indices;
84 %indices_to_compute = find(compute_derivative_indices_old);
85 
86 for p=1:nr_parameters
87  if model.verbose >=8
88  disp('-----------------------------------------------');
89  disp(['Generating RB of derivative ',num2str(p),'...'])
90  disp('-----------------------------------------------');
91  end
92  %set fields, so that the right error is produced
93 % model.set_rb_in_detailed_data = @(detailed_data,RB)lin_evol_opt_set_rb_in_detailed_data_separate_bases(detailed_data,RB,p);
94 % model.get_estimator_from_sim_data = @(sim_data)get_estimator_from_sim_data_mixed(sim_data,1);
95 % model.get_dofs_from_sim_data = @(sim_data)get_dofs_from_sim_data_for_sensitivity_extension(sim_data,1);
96 % model.get_rb_size = @(model, detailed_data)lin_evol_opt_get_rb_size(model, detailed_data,p);
97 % model.get_rb_from_detailed_data=@(detailed_data)lin_evol_opt_get_rb_from_detailed_data_separate_bases(detailed_data,p);
98  model = setfield_in_model_and_base_model(model,'set_rb_in_detailed_data',@(detailed_data,RB)lin_evol_opt_set_rb_in_detailed_data_separate_bases(detailed_data,RB,p));
99  model = setfield_in_model_and_base_model(model,'get_estimator_from_sim_data',@(sim_data)get_estimator_from_sim_data_mixed(sim_data,1));
100  model = setfield_in_model_and_base_model(model,'get_dofs_from_sim_data', @(sim_data)get_dofs_from_sim_data_for_sensitivity_extension(sim_data,1));
101  model = setfield_in_model_and_base_model(model,'get_rb_size', @(model, detailed_data)lin_evol_opt_get_rb_size(model, detailed_data,p));
102  model = setfield_in_model_and_base_model(model,'get_rb_from_detailed_data',@(detailed_data)lin_evol_opt_get_rb_from_detailed_data_separate_bases(detailed_data,p));
103 
104  %model.optimization.params_to_optimize = [model.optimization.params_to_optimize,1];
105  %model.compute_derivative_indices = zeros(1,size(compute_derivative_indices_old,2));
106  %model.compute_derivative_indices(indices_to_compute(p)) = 1;
107  model.optimization.params_to_optimize = zeros(1,nr_parameters);
108  model.optimization.params_to_optimize(p)= 1;
109  if isfield(model,'base_model')&&isfield(model.base_model,'optimization')
110  model.base_model.optimization.params_to_optimize = zeros(1,nr_parameters);
111  model.base_model.optimization.params_to_optimize(p) = 1;
112  end
113  if (isfield(model_data,'RB_der_info'))&&(length(model_data.RB_der_info)>=p)
114  model_data.RB_info = model_data.RB_der_info{p};
115  end
116  detailed_data = lin_evol_gen_detailed_data(model, model_data);
117  RB_der_info{p} = detailed_data.RB_info;
118  RB_der = detailed_data.RB_der;
119  model_data.RB_der = RB_der;
120  %filecache_clear;
121 end
122 
123 detailed_data.RB_info = RB_info;
124 detailed_data.RB_der_info = RB_der_info;
125 detailed_data.RB = RB_finished;
126 detailed_data.RB_der = RB_der;
127 
128 model = setfield_in_model_and_base_model(model,'compute_derivative_info',compute_derivative_info_old);
129 %model.compute_derivative_indices = compute_derivative_indices_old;
130 
131 
132 function model = setfield_in_model_and_base_model(model,field, entry)
133 model = setfield(model,field,entry);
134 if isfield(model,'base_model')&&isfield(model.base_model,field)
135  model.base_model = setfield(model.base_model,field,entry);
136 end
function r = verbose(level, message, messageId)
This function displays messages depending on a message-id and/or a level. Aditionally you can set/res...
Definition: verbose.m:17
function detailed_data = lin_evol_opt_gen_detailed_data_separate_bases(model, model_data)
lin_evol_opt_gen_detailed_data_separate_bases(model, model_data)
function detailed_data = lin_evol_opt_set_rb_in_detailed_data_separate_bases(detailed_data, RB, derivative_index)
lin_evol_opt_set_rb_in_detailed_data_separate_bases(detailed_data,RB,derivative_indx) ...
function RB = lin_evol_opt_get_rb_from_detailed_data_separate_bases(detailed_data, derivative_index)
lin_evol_opt_get_rb_from_detailed_data_separate_bases(detailed_data,p);