rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
script_detailled_simulation_cone4_ref5.m
Go to the documentation of this file.
1 % detailed_simulation_refined
2 
3 dbstop if error
4 resume_simulation=1;
5 
6 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7 %%%% RESUME SIMULATION ?!?!?! %%%%%%%%%%%%%%%%%%%%%
8 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9 %%%% Falls Simulation mit vorher gespeicherten Daten fortgesetzt wird:
10 %%%% Variable resume_simulation = 1 setzen und
11 %%%% hier den Name der zu ladenden Datei eingeben:
12 if exist('resume_simulation', 'var') && resume_simulation == 1
13 
14  %falls automatisch gespeicherte daten vorhanden und geladen werden
15  %sollen: tue dies hier und verwerfe die bisher geladenen daten:
16  if exist('loaded_automatically', 'var') && loaded_automatically == 1
17  %Daten müssen hier nicht mehr geladen werden, wurde schon in
18  %"DAS_UEBERSKRIPT" gemacht
19  cone_stop = c; %nur diesen einen cone_wert_berechnen
20  else %falls von hand geldane werden soll: gehe hier rein
21  load_saved_results = 'finished_det_sim_cone4_refstop4_copy';
22  %load_saved_results = 'sicher_oli_c1_2done';
23  load_string = ['load ', load_saved_results];
24  eval(load_string)
25  refinement_stop=5;
26  end
27 
28  resume_simulation = 1; %wird durch das laden der daten auf 0 gesetzt --> muss ich heir von hand wieder auf 1 setzen
29  cone_start = c;
30  cone_stop = c;
31 end
32 
33 
34 
35 if (~exist('resume_simulation', 'var')) || (resume_simulation == 0)
36  % If a calculation is resumed (that means if there exists a variable resume_simulation=1),
37  % use the loaded data instead of creating new data, i.e. this part is
38  % leapfroged and a new simulation is started
39 
40  clear
41  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
42  %%%% NEW SIMULATION !!! %%%%%%%%%%
43  %%%% Change here the details of the calculation
44  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
45  used_basis_load = ['Greedy_basis_coarse1_100_adapt'];
46 
47  refinement_stop = 5; % Refinement_stop sets the meximal refinement_level,
48  % that means the level of subdivision of vx_weight and vy_weight
49  % 1 means 3 points per direction, 2 means 5
50  % points, 9 means 9 points...
51  cone_weight_nbrs = 17;
52 
53  % IN JEWEILGER VERSION (MARKUS; DANIEL; BERNARD; OLI)ANPASSEN!!!
54  % CONE WEIGHT LÄUFT VON 1 bis 17!!!
55  %Oli:
56  cone_start = 4;
57  cone_stop = 4;
58 
59  % END: IN JEWEILGER VERSION (MARKUS; DANIEL; BERNARD; OLI) ANPASSEN!!!
60 
61 
62  % load the basis from *.mat file
63  used_basis=[used_basis_load,'.mat'];
64  load(used_basis);
65 
66  %change some fields in the model
67  model.compute_derivative_info=1;
68  model.optimization.params_to_optimize = [1 1 1];
69  model.L_I_inv_norm_bound = 1;
70  model.L_E_norm_bound = 1;
71  model.L_E_der_norm_bound = [0,1.25, 1];
72  model.L_I_der_norm_bound = [0,0,0];
73 
74  reduced_data = gen_reduced_data(model, detailed_data);
75 
76  nr_params = length(model.mu_names);
77 
78  cone_weight = linspace(model.mu_ranges{1}(1),model.mu_ranges{1}(2),cone_weight_nbrs);
79  resume_simulation=0;
80  time=0;
81 end
82 
83 backup_nr = 30; % do a backup after (save workspace) after "backup_nr" simulations
84 
85 %Start Simulation
86 for c = cone_start:cone_stop % OBEN IN JEWEILIGER VERSION ANPASSEN: Laufindex für cone_weight
87  model.cone_weight = cone_weight(c);
88 
89  if resume_simulation ~= 1
90  clear value_calculated sim_data_J sim_data_s
91  end
92 
93  %if saved data are loaded to resume a calculation where the
94  %refinement_level has already been higher than 1, this refinement_level
95  %must be set here again...
96  if resume_simulation == 1
97  refinement_start = refinement_level;
98  else
99  refinement_start = 1;
100  end
101 
102 
103  for refinement_level = refinement_start:refinement_stop;
104 
105  dots_vx_vy = 2^refinement_level+1;
106 
107 
108  %create matrices in first loop
109  if ~exist('value_calculated','var')
110  value_calculated = zeros(dots_vx_vy);
111  end
112  if ~exist('sim_data_J','var')
113  sim_data_J = cell(dots_vx_vy, dots_vx_vy);
114  end
115  if ~exist('sim_data_s','var')
116  sim_data_s = cell(dots_vx_vy, dots_vx_vy);
117  end
118 
119  vx_weight = linspace(model.mu_ranges{2}(1),model.mu_ranges{2}(2),dots_vx_vy);
120  vy_weight = linspace(model.mu_ranges{3}(1),model.mu_ranges{3}(2),dots_vx_vy);
121 
122  %%%%%%%%%%%%
123  % simulation
124  %%%%%%%%%%%%
125  for x=1:dots_vx_vy
126  model.vx_weight=vx_weight(x);
127  for y=1:dots_vx_vy
128  model.vy_weight=vy_weight(y);
129 
130  if value_calculated(x,y) ~= 1
131 
132  %perform detailed_simulation
133  tic;
134  model.detailed_simulation = @lin_evol_opt_detailed_der_simulation;
135  %model.detailed_simulation = @test_det_der_sim_dummy; %IN CASE OF TESTING OF SOME CHANGES
136  sim_data = detailed_simulation(model, model_data);
137  sim_data_J{x,y} = sim_data.y;
138  sim_data_s{x,y} = sim_data.y_der;
139 
140  value_calculated(x,y) = 1;
141 
142  % Calculate the needed time for display
143  sim_time=toc/60; %Zeit für die letzte Simulation
144  time = time + sim_time; %bisher vergangene Zeit in Minuten
145  nr_sims_per_cone = (2^refinement_stop +1)^2;
146  nr_sims_done = length(find(value_calculated)) + ...
147  + (c - cone_start) * nr_sims_per_cone; %Anzahl der schon berechneten Simulationen
148  nr_sims_total = (2^refinement_stop + 1)^2 * (cone_stop - cone_start +1); %Gesamtanzahl der Simulationen (abh. vom Refinement Stop)
149  nr_sims_left_cone = nr_sims_per_cone - length(find(value_calculated));
150  nr_sims_left_refinement = mod(dots_vx_vy^2 - mod(nr_sims_per_cone - nr_sims_left_cone,dots_vx_vy^2),dots_vx_vy^2);
151  nr_sims_left_total = nr_sims_total - nr_sims_done; %insgesamt noch benötigte Simulationen
152  average_time = time/nr_sims_done; %Durchschnittszeit pro Simulation in Minuten
153  expected_time_left_cone = average_time * nr_sims_left_cone; %Vorr. verbleibende Zeit in Minuten auf diesem Refinement-Level
154  expected_time_left_total = average_time * nr_sims_left_total; %Vorr. verbleibende Zeit in Minuten auf diesem Refinement-Level
155 
156  %Display some status results
157  disp(['Insgesamt Durchgeführte Simulationen: ' num2str(nr_sims_done) ' (von ' num2str(nr_sims_total) ' gesamt)']);
158  disp('---');
159  disp(['Aktueller cone_weight Wert = ' num2str(model.cone_weight) ...
160  ' (zu berechnender Cone Wert Nr.' num2str(c - cone_start + 1) ' von ' num2str(cone_stop-cone_start+1) ')']);
161  disp(['Anzahl der durchgeführten Simulationen für diesen Cone Wert: ' num2str(length(find(value_calculated))) ...
162  ' von ' num2str(nr_sims_per_cone) ' (' num2str(nr_sims_left_cone) ' noch zu berechnen)']);
163  disp(['+ aktuelles Refinement Level für diesen Cone-Wert = ' num2str(refinement_level) ' (entspricht ' ...
164  num2str(dots_vx_vy^2) ' Punkten)']);
165  disp(['+ maximales Refinement Level = ' num2str(refinement_stop) ' (entspricht '...
166  num2str(nr_sims_per_cone) ' Punkten)']);
167  disp(['+ Anzahl der noch zu berechnenden Punkte für dieses Refinement-Level: ' num2str(nr_sims_left_refinement)]);
168  disp('---');
169  disp(['Gesamtzeit nach diesem Durchlauf: ' num2str(time) ' Minuten / ' num2str(time/60) ' Stunden']);
170  disp(['durchschnittliche Zeit pro Durchlauf: ' num2str(average_time) ' Minuten']);
171  disp(['Vorraussichtlich verbleibende Zeit für diesen Cone-Wert: ' num2str(expected_time_left_cone) ...
172  ' Minuten / ' num2str(expected_time_left_cone/60) ' Stunden']);
173  disp(['Vorraussichtlich verbleibende Gesamtzeit: ' num2str(expected_time_left_total) ' Minuten / '...
174  num2str(expected_time_left_total/60) ' Stunden']);
175  disp('--------------------------------------------------------------------------');
176  disp('--------------------------------------------------------------------------');
177 
178  resume_simulation = 0;
179 
180  % Backup from time to time...
181  if mod(nr_sims_done,backup_nr) == 0;
182  backup_string=['save backup_cone', num2str(c), '_', num2str(cone_weight_nbrs), ...
183  '_simsdonecone', num2str(length(find(value_calculated))), ...
184  '_reflvl', num2str(refinement_level), '_simsleftreflvl', num2str(nr_sims_left_refinement)];
185  eval(backup_string)
186  end
187  end
188  end
189  end
190 
191  used_cone_weight = cone_weight(c);
192  save_string=['save det_sim_cone', num2str(c), '_', num2str(cone_weight_nbrs), '_vx',...
193  num2str(dots_vx_vy),'_vy',num2str(dots_vx_vy), '_', used_basis, ...
194  ' sim_data_J', ' sim_data_s', ' used_cone_weight', ' value_calculated', ' vx_weight', ' vy_weight'...
195  ' cone_weight', ' refinement_level'];
196  eval(save_string)
197 
198  %falls letzte simulation vorbei: speichere kompletten workspace
199  %bevors ans neue cone geht! auch wichtig für automatisches laden in
200  % DAS_UEBERSCRIPT
201  if length(find(value_calculated)) == nr_sims_per_cone
202  save_string_cone = ['save finished_det_sim_cone', num2str(c), '_refstop', num2str(refinement_stop)];
203  eval(save_string_cone)
204  end
205 
206 
207  % Blowup the result-matrices and cells
208  value_calculated = blowup_matrix(value_calculated);
209  sim_data_J = blowup_cell(sim_data_J);
210  sim_data_s = blowup_cell(sim_data_s);
211 
212 
213  end
214 
215 end
function sim_data = test_det_der_sim_dummy(model, model_data)
only needed for testing script_detailled_simulation CREATE DUMMY FILE FOR TESTING!!!! ...