rbmatlab 0.10.01
|
00001 % script demonstrating the burgers equation with explicit fv 00002 % discretization, empirical interpolation and RB model reduction 00003 % 00004 % a step needs to be selected in this script, default is 1. 00005 % 00006 % example is meant to demonstrate automatic space dimension reduction 00007 % of the algorithm. 00008 % The interpolation basis functions are nicely vertical stripes. 00009 % The error convergence in ei however is constant until 100 basis 00010 % functions then drops to zero. Interesting fact, but clearly M not 00011 % variable afterwards!!! 00012 % As a reduced basis, two shock-trajectories are used. 00013 00014 % Bernard Haasdonk 16.6.2008 00015 00016 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00017 %%%%%% Select here, what is to be performed with the burgers data %%%%%%%%%% 00018 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00019 %step = 1 % single detailed simulation with given data and plot. Run 00020 % this with varying parameters mu until sure that scheme 00021 % is stable. Modify dt or the data-functions accordingly, 00022 % until a nice parameter-domain with uniformly stable 00023 % detailed scheme is obtained. 00024 %step = 2 % generate colateral reduced basis of L_E operator 00025 % takes still 20 minutes if snapshots are already computed!! 00026 %step = 3 % compare single detailed simulation with and without 00027 % interpolated space operator 00028 %step = 4 % generate dummy reduced basis from trajectories and check, if 00029 % ei_interpolation with projection on this space maintains 00030 % result. A simple reduced simulation can also be 00031 % performed. All results should be visually identical 00032 %step = 5 % generate reduced basis 00033 %step = 6 % time measurement of reduced simulation 00034 00035 %step = 7 % generate error-landscape over varying N (and eventually M) 00036 % can take several hours!!! 00037 %step = 8 % generate different Figures for presentation and time measurement 00038 step = 9 % start demo_rb_gui with error estimator 00039 %step = 10 % start demo_rb_gui without error estimator 00040 00041 % output-filenames in rbmatlabtemp 00042 CRBfname = 'riemann_burgers_CRB.mat'; 00043 detailedfname = 'riemann_burgers_detailed.mat'; 00044 testdir = 'riemann_burgers_test_10'; 00045 results_fname_base = 'riemann_burgers_step7_result'; 00046 ei_detailed_savepath = 'riemann_burgers_ei_detailed'; 00047 ei_operator_savepath = 'riemann_burgers_detailed'; 00048 00049 % old settings, now in riemann_burgers_model: 00050 00051 switch step 00052 case 1 % single detailed simulation and plot 00053 00054 descr = riemann_burgers_descr([]); 00055 dmodel = gen_detailed_model(descr); 00056 model_data = gen_model_data(dmodel); 00057 00058 disp('performing single detailed simulation') 00059 % grid = construct_grid(dmodel); 00060 % shock moving to left: 00061 % dmodel = set_mu(dmodel,[-0.5,1,-1]); % cdir_left, c_dir_right, vx 00062 % non-moving shock: 00063 % dmodel = set_mu(dmodel,[-1,1,-1]); % cdir_left, c_dir_right, vx 00064 % symmetric rarefaction wave: 00065 % dmodel = set_mu(dmodel,[1,-1,-1]); % cdir_left, c_dir_right, vx 00066 % moving shock with velocity 0.5: 00067 dmodel = set_mu(dmodel,[0,1,-1]); % cdir_left, c_dir_right, vx 00068 sim_data = detailed_simulation(dmodel, model_data); 00069 plot_params = []; 00070 plot_sim_data(dmodel,model_data,sim_data,plot_params); 00071 save(fullfile(rbmatlabtemp,detailedfname),... 00072 'model_data','dmodel'); 00073 % case 4 % construct dummy reduced basis by single trajectory and simulate 00074 % load(fullfile(rbmatlabtemp,CRBfname)); 00075 % descr = riemann_burgers_descr; 00076 % [dmodel, rmodel] = gen_models(descr); 00077 % % set mu values new, as may be different in stored file 00078 % dmodel.c_dir_left = 1.0; 00079 % dmodel.c_dir_right = 0.0; 00080 % dmodel.dir_middle = 0.5; 00081 00082 % disp('detailed interpolated simulation for basis construction:') 00083 % rmodel.M = size(detailed_data.QM{1},2); 00084 % sim_data_interpol = ... 00085 % nonlin_evol_detailed_ei_simulation(dmodel,detailed_data); 00086 % % A = feval(params.inner_product_matrix_algorithm, ... 00087 % % detailed_data.grid,params); 00088 % UON = dmodel.orthonormalize(dmodel,model_data,sim_data_interpol.U,1e-4); 00089 % % UON = dmodel.orthonormalize(dmodel,model_data,sim_data_interpol.U,1e-4); 00090 % detailed_data.RB = UON; 00091 % dmodel.N = size(detailed_data.RB,2); 00092 % dmodel.M = size(detailed_data.QM{1},2); 00093 % save(fullfile(rbmatlabtemp,'riemann_burgers_temp'),'dmodel','detailed_data') 00094 % disp('reduced simulation:') 00095 % reduced_data = gen_reduced_data(dmodel,detailed_data); 00096 % sim_data = rb_simulation(dmodel,reduced_data); 00097 % sim_data = rb_reconstruction(dmodel,detailed_data,sim_data); 00098 00099 % disp('detailed interpolated and rb-projected simulation:') 00100 % dmodel.M = size(detailed_data.QM{1},2); 00101 % dmodel.N = size(detailed_data.RB,2); 00102 % sim_data_ei_rb_proj = ... 00103 % nonlin_evol_detailed_ei_rb_proj_simulation(dmodel,detailed_data); 00104 00105 % plot_params.title = 'reduced simulation result'; 00106 % plot_sim_data(dmodel,model_data,sim_data,plot_params); 00107 % plot_params.title = 'detailed ei_interpol simulation result'; 00108 % plot_sim_data(dmodel,model_data,sim_data_interpol,plot_params); 00109 % plot_params.title = 'detailed ei_interpol and rb_projected simulation result'; 00110 % plot_sim_data(dmodel,model_data,sim_data_ei_rb_proj,plot_params); 00111 case 5 % reduced basis construction 00112 disp('constructing reduced basis') 00113 descr = riemann_burgers_descr; 00114 [dmodel,rmodel] = gen_models(descr); 00115 model_data = gen_model_data(dmodel); 00116 00117 detailed_data = gen_detailed_data(rmodel, model_data); 00118 % set these fields such that demo_rb_gui works nicely 00119 rmodel.N = get_rb_size(detailed_data, rmodel); 00120 rmodel.M = get_ei_size(detailed_data, rmodel); 00121 00122 save(fullfile(rbmatlabtemp,detailedfname),... 00123 'detailed_data','dmodel','rmodel'); 00124 00125 max_err_sequence = get_field(detailed_data.datatree, 'max_err_sequence'); 00126 plot(max_err_sequence); 00127 set(gca,'Yscale','log'); 00128 title('RB-generation error convergence'); 00129 00130 case 6 % time measurement of reduced simulation 00131 00132 load(fullfile(rbmatlabtemp,detailedfname)); 00133 disp('reduced simulation:') 00134 rmodel.N = get_rb_size(detailed_data, rmodel); 00135 rmodel.M = get_ei_size(detailed_data, rmodel)-rmodel.Mstrich; 00136 reduced_data = gen_reduced_data(rmodel,detailed_data); 00137 tic; 00138 rb_sim_data = rb_simulation(rmodel,reduced_data); 00139 t = toc; 00140 disp(['time for online phase: t = ',num2str(t)]); 00141 00142 disp('full simulation:') 00143 tic; 00144 sim_data = detailed_simulation(dmodel,model_data); 00145 t = toc; 00146 disp(['time for detailed simulation: t = ',num2str(t)]); 00147 case 9 % start demo_rb_gui with error estimation 00148 load(fullfile(rbmatlabtemp,detailedfname)); 00149 % dmodel = riemann_burgers_model; 00150 % dmodel.show_colorbar = 1; 00151 dmodel.c_dir_left = -1; 00152 dmodel.c_dir_right = 0; 00153 dmodel.flux_vx = -1; 00154 rmodel.M = get_ei_size(detailed_data, rmodel) - 1; 00155 rmodel.Mstrich = 1; 00156 rmodel.N = get_rb_size(detailed_data, rmodel); 00157 rmodel.enable_error_estimator = 1; 00158 demo_rb_gui(rmodel,detailed_data); 00159 00160 case 10 % start demo_rb_gui without error estimation 00161 load(fullfile(rbmatlabtemp,detailedfname)); 00162 % dmodel = riemann_burgers_model; 00163 % dmodel.show_colorbar = 1; 00164 rmodel.M = get_ei_size(detailed_data, rmodel); 00165 rmodel.Mstrich = 0; 00166 rmodel.N = get_rb_size(detailed_data, rmodel); 00167 rmodel.enable_error_estimator = 0; 00168 demo_rb_gui(rmodel,detailed_data); 00169 00170 otherwise 00171 error('step-number is unknown!'); 00172 end;