1 % detailed_simulation_refined
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
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_cone2_refstop4_copy';
22 %load_saved_results =
'sicher_oli_c1_2done';
23 load_string = [
'load ', load_saved_results];
28 resume_simulation = 1; %wird durch das laden der daten auf 0 gesetzt --> muss ich heir von hand wieder auf 1 setzen
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
41 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
42 %%%% NEW SIMULATION !!! %%%%%%%%%%
43 %%%% Change here the details of the calculation
44 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
45 used_basis_load = ['Greedy_basis_coarse1_100_adapt'];
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;
53 % IN JEWEILGER VERSION (MARKUS; DANIEL; BERNARD; OLI)ANPASSEN!!!
54 % CONE WEIGHT LÄUFT VON 1 bis 17!!!
59 % END: IN JEWEILGER VERSION (MARKUS; DANIEL; BERNARD; OLI) ANPASSEN!!!
62 % load the basis from *.mat file
63 used_basis=[used_basis_load,'.mat'];
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];
74 reduced_data = gen_reduced_data(model, detailed_data);
76 nr_params = length(model.mu_names);
78 cone_weight = linspace(model.mu_ranges{1}(1),model.mu_ranges{1}(2),cone_weight_nbrs);
83 backup_nr = 30; %
do a backup after (save workspace) after
"backup_nr" simulations
86 for c = cone_start:cone_stop % OBEN IN JEWEILIGER VERSION ANPASSEN: Laufindex für cone_weight
87 model.cone_weight = cone_weight(c);
89 if resume_simulation ~= 1
90 clear value_calculated sim_data_J sim_data_s
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;
103 for refinement_level = refinement_start:refinement_stop;
105 dots_vx_vy = 2^refinement_level+1;
108 %create matrices in first loop
109 if ~exist(
'value_calculated',
'var')
110 value_calculated = zeros(dots_vx_vy);
112 if ~exist('sim_data_J','var')
113 sim_data_J = cell(dots_vx_vy, dots_vx_vy);
115 if ~exist('sim_data_s','var')
116 sim_data_s = cell(dots_vx_vy, dots_vx_vy);
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);
126 model.vx_weight=vx_weight(x);
128 model.vy_weight=vy_weight(y);
130 if value_calculated(x,y) ~= 1
132 %perform detailed_simulation
134 model.detailed_simulation = @lin_evol_opt_detailed_der_simulation;
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;
140 value_calculated(x,y) = 1;
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
156 %Display some status results
157 disp([
'Insgesamt Durchgeführte Simulationen: ' num2str(nr_sims_done)
' (von ' num2str(nr_sims_total)
' gesamt)']);
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)]);
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(
'--------------------------------------------------------------------------');
178 resume_simulation = 0;
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)];
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'];
198 %falls letzte simulation vorbei: speichere kompletten workspace
199 %bevors ans neue cone geht! auch wichtig für automatisches laden in
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)
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);
function sim_data = test_det_der_sim_dummy(model, model_data)
only needed for testing script_detailled_simulation CREATE DUMMY FILE FOR TESTING!!!! ...