3 % Demo showing the functionality of the dom_dec routines.
5 % some solutions of the iterative procedure are plotted,
6 % the detailed and reduced simulation are compared.
10 disp(
'start domain decomposition demo');
11 disp(
'-------------------------------');
12 disp(
'visualize detailed simulation');
13 disp(
'-----------------------------');
16 % specify geometrical decomposition
17 params.dd_rect_corner1 = {[0,0],[0.25,0],[0.75,0]};
18 params.dd_rect_corner2 = {[0.25,0.25],[0.75,0.75],[1,0.5]};
20 params.numintervals = 24; % discretization parameter
21 params.RB_numintervals = 2;
22 params.subsampling_level = 4; %
for plotting
27 disp(
'models created');
29 dir = model.dirichlet_side;
30 no_dir = mod(dir,2)+1;
33 model_data = gen_model_data(model);
34 disp(
'model_data created');
36 %%%%%%%%%%%%%%% visualize detailed simulation
37 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
39 model = set_mu(model,[1.843,2.878,8.879,0.874]);
41 % plot source
function
42 disp(
'plot source function');
43 source =
femdiscfunc([],model_data.base_model_data.df_info);
44 source = fem_interpol_local(model.base_model.source,source, ...
48 title(
'source function');
50 % perform detailed simulation
51 sim_data = detailed_simulation(model,model_data);
58 sim_data.uh{j}.dofs = sim_data.all_dofs{j}(:,i);
59 plot(sim_data.uh{j},params);
62 title([
'iterative solution, ', num2str(i),
' iterations']);
66 sim_data.uh{j}.dofs = sim_data.all_dofs{j}(:,end);
69 % compute un-decomposed solution - perform detailed simulation of
71 disp(
'perform detailed simulation of base_model');
72 base_sim_data = detailed_simulation(model.base_model, ...
73 model_data.base_model_data);
74 disp([
'output: s = ', num2str(base_sim_data.s),
', iterative: s = ', ...
75 num2str(sim_data.s)]);
78 plot_sim_data(model.base_model,model_data.base_model_data, ...
79 base_sim_data,params);
80 title(
'monolithic solution');
82 disp(
'press enter to continue');
85 %%%%%%%%%%%%%% compare detailed and reduced simulation
86 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
87 disp(
'---------------------------------------');
88 disp(
'compare detailed und reduced simulation');
89 disp(
'---------------------------------------');
90 model.det_sim_tol = 1e-07;
91 model.RB_sim_tol = 1e-07;
92 model.N_max = {12 12};
93 model.RB_generation_mode =
'PCA_trajectories';
94 model.RB_generation_epsilon = 1e-7;
97 disp(
'generate detailed_data');
99 detailed_data = gen_detailed_data(model,model_data);
100 model.base_model.dual_mode = 1;
101 detailed_data.dual_detailed_data = gen_detailed_data(model,model_data);
102 model.base_model.dual_mode = 0;
104 disp(
'dimensions of reduced basis:');
105 disp([
' N_1^0 = ',num2str(length(detailed_data.I_0{dir}))]);
106 disp([
' N_1^G = ',num2str(length(detailed_data.I_G{dir}))]);
107 disp([
' N_2^0 = ',num2str(length(detailed_data.I_0{no_dir}))]);
108 disp([
' N_2^G = ',num2str(length(detailed_data.I_G{no_dir}))]);
109 disp([
' M_1^0 = ',num2str(length(detailed_data.dual_detailed_data.I_0{dir}))]);
110 disp([
' M_1^G = ',num2str(length(detailed_data.dual_detailed_data.I_G{dir}))]);
111 disp([
' M_2^0 = ',num2str(length(detailed_data.dual_detailed_data.I_0{no_dir}))]);
112 disp([
' M_2^G = ',num2str(length(detailed_data.dual_detailed_data.I_G{no_dir}))]);
114 disp(
'generate reduced_data');
115 reduced_data = gen_reduced_data(model,detailed_data);
117 % perform detailed simulation
119 sim_data = detailed_simulation(model,model_data);
122 sim_data = model.compute_error(model,model_data,sim_data);
124 disp(
'------------------------------------------');
125 disp([
'elapsed time of detailed simulation: ', ...
126 num2str(det_sim_time,3),
's']);
127 disp([
'error of iterative solution: ',num2str(sim_data.X_err(end),3)]);
128 disp([
'error of iterative output: ', ...
129 num2str(abs(sim_data.s - sim_data.base_sim_data.s))]);
131 % perform reduced simulation
133 rb_sim_data = rb_simulation(model,reduced_data);
134 rb_sim_data = rb_reconstruction(model,detailed_data,rb_sim_data);
137 rb_sim_data = model.compute_error(model,detailed_data,rb_sim_data);
139 model.base_model.compute_output_functional = 0;
140 rb_sim_data_no = rb_simulation(model, reduced_data);
142 disp(
'------------------------------------------');
143 disp([
'elapsed time of reduced simulation: ',num2str(rb_sim_time,3), ...
145 disp([
'error of reduced iterative solution: ', ...
146 num2str(rb_sim_data.X_err(end),3)]);
147 disp([
'error estimate of reduced iterative solution: ', ...
148 num2str(rb_sim_data_no.Delta(end),3)]);
149 disp([
'error of reduced iterative output: ', ...
150 num2str(abs(rb_sim_data.sN - sim_data.base_sim_data.s))]);
151 disp([
'error estimate of reduced iterative output: ', ...
152 num2str(rb_sim_data.Delta_s)]);
155 title(
'detailed solution');
157 title(
'reduced solution');
class representing a continous piecewise polynomial function of arbitrary dimension. DOFS correspond to the values of Lagrange-nodes.
function demo_dom_dec()
Demo showing the functionality of the dom_dec routines.
function model = thermalblock_dd_model(params)
Custom thermalblock model used for domain decomposition.
function p = plot_sim_data(model, model_data, sim_data, plot_params)
function performing the plot of the simulation results as specified in model.
function model = dom_dec_model(base_model, params)
function creating a domain-decomposition-model with an arbitrary model and optional params...