rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
lin_evol_opt_gen_detailed_data_separate_bases_parallel.m
Go to the documentation of this file.
1 function detailed_data = lin_evol_opt_gen_detailed_data_separate_bases_parallel(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 % Generated fields of detailed_data:
14 % RB: The reduced bases for the solution
15 % RB_der: cell array with thr reduced bases for the derivative solution
16 % RB_info: Usual info field
17 % RB_der_info: cell array containing the RBinfo for the derivative
18 % reduced bases
19 %
20 
21 % Markus Dihlmann 31.03.2011
22 
23 %get number of parameters to know how many derivative_rb have to be
24 %generated
25 nr_parameters = length(get_mu(model));
26 
27 Nmax = model.RB_stop_Nmax;
28 epsilon_tol = model.RB_stop_epsilon;
29 % check some fields in model
30 if isfield(model,'RB_mixed_sensitivity_basis_generation')
31  if model.RB_mixed_sensitivity_basis_generation
32  disp('Warning: The field model.RB_mixed_sensitivity_basis_generation is probably set to the wrong value');
33  model.RB_mixed_sensitivity_basis_generation=0;
34  end
35 end
36 
37 
38 %1. start generating a normal reduced basis
39 %-----------------------------------------
40 compute_derivative_info_old = model.compute_derivative_info;
41 model.compute_derivative_info =0;
42 if isfield(model,'base_model')&&isfield(model.base_model,'compute_derivative_info')
43  model.base_model.compute_derivative_info = 0;
44 end
45 
46 %set fields, so that the error and the dofs of the solution is returned
47 model.get_estimator_from_sim_data = @(sim_data)get_estimator_from_sim_data_mixed(sim_data,0);
48 model.get_dofs_from_sim_data = @(sim_data)get_dofs_from_sim_data_for_sensitivity_extension(sim_data,0);
49 model.get_rb_size = @(model, detailed_data)lin_evol_opt_get_rb_size(model, detailed_data,0);
50 
51 if isfield(model,'RB_solution_Nmax')
52  model.RB_stop_Nmax=model.RB_solution_Nmax;
53 else
54  model.RB_stop_Nmax = 2*Nmax;
55 end
56 if isfield(model,'RB_solution_epsilon')
57  model.RB_stop_epsilon = model.RB_solution_epsilon;
58 else
59  model.RB_stop_epsilon = epsilon_tol/10;
60 end
61 
62 detailed_data = lin_evol_gen_detailed_data(model, model_data);
63 RB_finished = detailed_data.RB;
64 RB_info = detailed_data.RB_info;
65 model_data.RB = RB_finished;
66 filecache_clear;
67 
68 %2. generate a reduced basis for every derivative in a loop
69 %-----------------------------------------------------------
70 model.RB_stop_Nmax = Nmax;
71 model.RB_stop_epsilon = epsilon_tol;
72 model.compute_derivative_info =1;
73 if isfield(model,'base_model')&&isfield(model.base_model,'compute_derivative_info')
74  model.base_model.compute_derivative_info = 1;
75 end
76 RB_der_info = cell(1,nr_parameters);
77 RB_der = cell(1,nr_parameters);
78 for i=1:length(RB_der)
79  %empty initialization with correct size for lin_evol_opt_rb_operators
80  %to work a priori for all p
81  RB_der{i} = zeros(size(RB_finished,1),1);
82 end
83 model_data.RB_der = RB_der;
84 %model_data.RB = RB_finished;
85 %compute_derivative_indices_old=model.compute_derivative_indices;
86 %indices_to_compute = find(compute_derivative_indices_old);
87 matlabpool open
88 parfor p=1:nr_parameters
89  disp('-----------------------------------------------');
90  disp(['Generating RB of derivative ',num2str(p),'...'])
91  disp('-----------------------------------------------');
92  %set fields, so that the right error is produced
93  model_help = model;
94  model_help = setfield_in_model_and_base_model(model_help,'set_rb_in_detailed_data',@(detailed_data,RB)lin_evol_opt_set_rb_in_detailed_data_separate_bases(detailed_data,RB,p));
95  model_help = setfield_in_model_and_base_model(model_help,'get_estimator_from_sim_data',@(sim_data)get_estimator_from_sim_data_mixed(sim_data,1));
96  model_help = setfield_in_model_and_base_model(model_help,'get_dofs_from_sim_data', @(sim_data)get_dofs_from_sim_data_for_sensitivity_extension(sim_data,1));
97  model_help = setfield_in_model_and_base_model(model_help,'get_rb_size', @(model, detailed_data)lin_evol_opt_get_rb_size(model, detailed_data,p));
98  model_help = setfield_in_model_and_base_model(model_help,'get_rb_from_detailed_data',@(detailed_data)lin_evol_opt_get_rb_from_detailed_data_separate_bases(detailed_data,p));
99 
100 % model_help.set_rb_in_detailed_data = @(detailed_data,RB)lin_evol_opt_set_rb_in_detailed_data_separate_bases(detailed_data,RB,p);
101 % model_help.get_estimator_from_sim_data = @(sim_data)get_estimator_from_sim_data_mixed(sim_data,1);
102 % model_help.get_dofs_from_sim_data = @(sim_data)get_dofs_from_sim_data_for_sensitivity_extension(sim_data,1);
103 % model_help.get_rb_size = @(model, detailed_data)lin_evol_opt_get_rb_size(model, detailed_data,p);
104 % model_help.get_rb_from_detailed_data=@(detailed_data)lin_evol_opt_get_rb_from_detailed_data_separate_bases(detailed_data,p);
105 % model_help.separate_bases_derivative_nr = p;
106  %model.optimization.params_to_optimize = [model.optimization.params_to_optimize,1];
107  %model.compute_derivative_indices = zeros(1,size(compute_derivative_indices_old,2));
108  %model.compute_derivative_indices(indices_to_compute(p)) = 1;
109  model_help.optimization.params_to_optimize = zeros(1,nr_parameters);
110  model_help.optimization.params_to_optimize(p) = 1;
111  if isfield(model_help,'base_model')&&isfield(model_help.base_model,'optimization')
112  model_help.base_model.optimization.params_to_optimize = zeros(1,nr_parameters);
113  model_help.base_model.optimization.params_to_optimize(p) = 1;
114  end
115 
116  detailed_data_buf = lin_evol_gen_detailed_data(model_help, model_data);
117  RB_der_info{p} = detailed_data_buf.RB_info;
118  RB_der{p} = detailed_data_buf.RB_der{p};
119  %model_data.RB_der{p} = RB_der{p};
120  filecache_clear;
121 end
122 matlabpool close
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.compute_derivative_info = compute_derivative_info_old;
129 %model.compute_derivative_indices = compute_derivative_indices_old;
130 
131 function model = setfield_in_model_and_base_model(model,field, entry)
132 model = setfield(model,field,entry);
133 if isfield(model,'base_model')&&isfield(model.base_model,field)
134  model.base_model = setfield(model.base_model,field,entry);
135 end
function detailed_data = lin_evol_opt_gen_detailed_data_separate_bases_parallel(model, model_data)
lin_evol_opt_gen_detailed_data_separate_bases(model, model_data)
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);