1 function model = dom_dec_model(base_model,params)
2 %
function model = dom_dec_model(base_model,params)
4 %
function creating a domain-decomposition-model with an arbitrary
5 % model and optional params. the domain in model is decomposed into
6 % two parts. one can specify multiple rectangles in
7 % params.dd_rect_corner1/2, which are used for constructing the
8 % grids of the first subdomain. the second subdomain then is the
9 % complement of the first.
18 if ~isfield(params,{
'dd_rect_corner1',
'dd_rect_corner2'})
19 params.dd_rect_corner1 = {[0,0],[0.25,0],[0.75,0]};
20 params.dd_rect_corner2 = {[0.25,0.25],[0.75,0.75],[1,0.5]};
22 if ~isfield(params,
'RB_extension_method')
23 params.RB_extension_method = 'A';
25 if ~isfield(params,'RB_sequence_mode')
26 params.RB_sequence_mode = 0;
28 if ~isfield(params,'RB_numintervals')
29 params.RB_numintervals = 4;
34 model.decomp_mode = 0; %default
35 model.base_model = base_model;
36 model.dirichlet_side = 1; % 1 or 2
38 if isfield(base_model,'mu_names')
39 model.mu_names = base_model.mu_names;
40 model.mu_ranges = base_model.mu_ranges;
42 model.mu_ref = zeros(length(model.mu_ranges),1);
43 for i = 1:length(model.mu_ranges)
44 model.mu_ref(i) = (model.mu_ranges{i}(1) + ...
45 model.mu_ranges{i}(2))/2;
49 % required funtion pointers
for the simulations
50 model.set_mu = @dom_dec_set_mu;
51 model.get_mu = @get_mu_default;
52 model.gen_model_data = @dom_dec_gen_model_data;
54 model.detailed_simulation = @dom_dec_detailed_simulation;
55 model.get_dofs_from_sim_data = @dom_dec_get_dofs_from_sim_data;
57 model.gen_reduced_data = @dom_dec_gen_reduced_data;
58 model.get_rb_size = @dom_dec_get_rb_size;
59 model.orthonormalize = @dom_dec_orthonormalize;
60 model.rb_simulation = @dom_dec_rb_simulation;
64 model.get_inner_product_matrices = @ ...
67 model.get_rb_from_detailed_data = @ ...
68 dom_dec_get_rb_from_detailed_data;
69 model.RB_extension_PCA_fixspace = @ ...
70 dom_dec_RB_extension_PCA_fixspace;
71 model.RB_extension_eigenbasis = @ dom_dec_RB_extension_eigenbasis;
74 model.dd_rect_corner1 = params.dd_rect_corner1;
75 model.dd_rect_corner2 = params.dd_rect_corner2;
77 % settings
for the detailed simulation:
78 model.maxiter = 10000;
79 model.det_sim_tol = 1e-12;
80 model.relaxation_factor = 1; % the optimal relaxation parameter is
81 % multiplied by
this factor
83 % settings
for the basis generation:
84 model.RB_generation_mode =
'POD_greedy';
85 model.RB_generation_epsilon = 1e-14;
86 model.RB_extension_method = params.RB_extension_method;
87 model.RB_extension_PCA_modes = 1;
88 model.RB_sequence_mode = params.RB_sequence_mode;
89 model.N_max = {100 100};
91 model.RB_init_mode =
'random';
92 model.N_eigenbasis = 0;
93 model.RB_error_indicator =
'rb_error_estimate';
94 model.RB_greedy_tolerance = 1e-06;
96 if isfield(base_model,
'mu_names')
97 model.RB_numintervals = params.RB_numintervals * ...
98 ones(length(base_model.mu_names),1);
101 % settings for the reduced simulation:
102 model.RB_approximate_thetaN = 1;
103 model.RB_maxiterN = 10000;
104 model.RB_sim_tol = 1e-12;
106 if isfield(base_model,'coercivity_alpha')
107 model.coercivity_alpha = base_model.coercivity_alpha;
109 if isfield(base_model,'continuity_gamma')
110 model.continuity_gamma = base_model.continuity_gamma;
113 if isfield(base_model,'mu_names')
115 model = set_mu_default(model,get_mu(base_model));