2 % Tests
for the generation of an empirical
operator interpolant
5 % - 1. Generation of one EI for one operator
6 % - 2. Generation of one EI for two operators
7 % - 3. Generation of two EIs for two operators
11 % declare minimal model
13 mm.name =
'minimal_model';
14 mm.mu_names = {
'par1',
'par2',
'par3'};
15 mm.mu_ranges = {[0 1], [0 2], [0 3]};
21 mm.filecache_ignore_fields_in_model = {};
22 mm.detailed_simulation = @(model, model_data)
struct(
'u', model.get_mu(model));
25 mm.fv_impl_diff_weight = 1.0;
26 mm.fv_impl_conv_weight = 0.0;
27 mm.fv_impl_react_weight = 0.0;
29 mm.mass_matrix = @fv_mass_matrix;
31 mm.gridtype =
'rectgrid';
34 mm.xnumintervals = 30;
35 mm.ynumintervals = 30;
36 mm.bnd_rect_corner1 = [-1 -1];
37 mm.bnd_rect_corner2 = [2 2];
38 mm.bnd_rect_index = -2;
40 mm.diffusivity_ptr = @diffusivity_exponential;
41 mm.diffusivity_derivative_ptr = @diffusivity_exponential_derivative;
46 mm.laplacian_ptr = @(glob, U, model) U;
47 mm.laplacian_derivative_ptr = @(glob, U, model) ones(length(U),1);
48 mm.filecache_velocity_matrixfile_extract = 0;
49 mm.neumann_values_ptr = @neumann_values_homogeneous;
51 mm.get_inner_product_matrix = @(detailed_data) detailed_data.W;
55 mm.operators_ptr = @(x) x;
56 mm.init_values_algorithm = @(x) x;
59 bg_descr.rb_problem_type =
'LinEvol';
60 bg_descr.detailed_data_constructor = @Test.DetailedData;
61 bg_descr.reduced_data_constructor = @LinEvol.ReducedData;
63 dmodel = LinEvol.DetailedModel(mm);
66 M_train = ParameterSampling.Random(5);
67 rb_generator = SnapshotsGenerator.Random(dmodel,
'random', [],
true,
false);
68 ei_gen1 = SnapshotsGenerator.SpaceOpEvals(dmodel,
'implicit', rb_generator, mm.L_I_local_ptr,
true,
false);
69 ei_extension1 = Greedy.Plugin.EI(ei_gen1);
70 ei_extension1.stop_Mmax = 200;
72 ei_greedy1 = Greedy.Algorithm(ei_extension1, M_train);
73 ei_greedy1.stop_timeout = 60*60;
74 ei_greedy1.stop_epsilon = 1e-9;
76 bg_descr.bg_algorithm = ei_greedy1;
77 red_model1 = Test.ReducedModel(dmodel, bg_descr);
79 model_data = gen_model_data(dmodel);
81 evalc(
'detailed_data1 = gen_detailed_data(red_model1, model_data);');
90 max_err_sequence = get_field_on_active_child(detailed_data1.datatree, ...
91 'max_err_sequence', red_model1);
92 ok = ok & max_err_sequence(end) < 1e-10;
93 ok = ok & length(max_err_sequence) == 6;
96 ei_gen2 = SnapshotsGenerator.SpaceOpEvals(dmodel,
'explicit', rb_generator, mm.L_I_local_ptr,
true,
false);
98 ei_gen_sum = ei_gen1 + ei_gen2;
99 ei_extension2 = Greedy.Plugin.EI(ei_gen_sum);
100 ei_extension2.stop_Mmax = 200;
102 ei_greedy2 = Greedy.Algorithm(ei_extension2, M_train);
103 ei_greedy2.stop_timeout = 60*60;
104 ei_greedy2.stop_epsilon = 1e-9;
106 bg_descr.bg_algorithm = ei_greedy2;
107 red_model2 = Test.ReducedModel(dmodel, bg_descr);
109 evalc(
'detailed_data2 = gen_detailed_data(red_model2, model_data);');
119 max_err_sequence = get_field_on_active_child(detailed_data2.datatree, ...
120 'max_err_sequence', red_model2);
121 ok = ok & max_err_sequence(end) < 1e-10;
122 ok = ok & length(max_err_sequence) == 6;
124 ei_extension3 = Greedy.Plugin.EI(ei_gen2);
125 ei_extension3.stop_Mmax = 300;
127 ei_greedy3_exp = Greedy.Algorithm(ei_extension3, M_train);
128 ei_greedy3_exp.stop_epsilon = 1e-9;
129 ei_greedy3 = [ei_greedy1, ei_greedy3_exp];
131 bg_descr.bg_algorithm = ei_greedy3;
132 red_model3 = Test.ReducedModel(dmodel, bg_descr);
134 evalc(
'detailed_data3 = gen_detailed_data(red_model3, model_data);');
143 max_err_sequence = get_field_on_active_child(detailed_data3.datatree, ...
144 'max_err_sequence', red_model3,
'explicit');
145 ok = ok & max_err_sequence(end) < 1e-10;
146 ok = ok & length(max_err_sequence) == 6;
148 max_err_sequence = get_field_on_active_child(detailed_data3.datatree, ...
149 'max_err_sequence', red_model3,
'implicit');
150 ok = ok & max_err_sequence(end) < 1e-10;
151 ok = ok & length(max_err_sequence) == 6;