rbmatlab 0.10.01
scripts/riemann_burgers.m
Go to the documentation of this file.
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;
 All Classes Namespaces Files Functions Variables