rbmatlab  1.13.10
 All Classes Namespaces Files Functions Variables Groups Pages
test_ei_detailed.m
Go to the documentation of this file.
1 function ok = test_ei_detailed
2  % Tests for the generation of an empirical operator interpolant
3  %
4  % Test cases:
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
8 
9  ok = true;
10 
11  % declare minimal model
12  mm = [];
13  mm.name = 'minimal_model';
14  mm.mu_names = {'par1', 'par2', 'par3'};
15  mm.mu_ranges = {[0 1], [0 2], [0 3]};
16  mm.par1 = 0;
17  mm.par2 = 0;
18  mm.par3 = 0;
19  mm.debug = 0;
20  mm.force_delete = 1;
21  mm.filecache_ignore_fields_in_model = {};
22  mm.detailed_simulation = @(model, model_data) struct('u', model.get_mu(model));
23  mm.L_I_local_ptr = @fv_implicit_space;
24  mm.num_diff_flux_ptr = @fv_num_diff_flux_gradient;
25  mm.fv_impl_diff_weight = 1.0;
26  mm.fv_impl_conv_weight = 0.0;
27  mm.fv_impl_react_weight = 0.0;
28 
29  mm.mass_matrix = @fv_mass_matrix;
30 
31  mm.gridtype = 'rectgrid';
32  mm.xrange = [0 1];
33  mm.yrange = [0 1];
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;
39  mm.verbose = 9;
40  mm.diffusivity_ptr = @diffusivity_exponential;
41  mm.diffusivity_derivative_ptr = @diffusivity_exponential_derivative;
42  mm.diff_k0 = 0.00;
43  mm.diff_m = 1.0;
44  mm.diff_p = 2.0;
45  mm.decomp_mode = 0;
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;
50  mm.c_neu = 0.00;
51  mm.get_inner_product_matrix = @(detailed_data) detailed_data.W;
52  mm.l2_error_sequence_algorithm = @fv_l2_error;
53 
54  mm.new = 1;
55  mm.operators_ptr = @(x) x;
56  mm.init_values_algorithm = @(x) x;
57  mm.error_norm = 'l2';
58 
59  bg_descr.rb_problem_type = 'LinEvol';
60  bg_descr.detailed_data_constructor = @Test.DetailedData;
61  bg_descr.reduced_data_constructor = @LinEvol.ReducedData;
62 
63  dmodel = LinEvol.DetailedModel(mm);
64 
65  disp('Test 1');
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;
71 
72  ei_greedy1 = Greedy.Algorithm(ei_extension1, M_train);
73  ei_greedy1.stop_timeout = 60*60;
74  ei_greedy1.stop_epsilon = 1e-9;
75 
76  bg_descr.bg_algorithm = ei_greedy1;
77  red_model1 = Test.ReducedModel(dmodel, bg_descr);
78 
79  model_data = gen_model_data(dmodel);
80  try
81  evalc('detailed_data1 = gen_detailed_data(red_model1, model_data);');
82  catch err
83  ok = false;
84  disp('> failed');
85  end
86  if ok
87  disp('> passed');
88  end
89 
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;
94 
95  disp('Test 2');
96  ei_gen2 = SnapshotsGenerator.SpaceOpEvals(dmodel, 'explicit', rb_generator, mm.L_I_local_ptr, true, false);
97 
98  ei_gen_sum = ei_gen1 + ei_gen2;
99  ei_extension2 = Greedy.Plugin.EI(ei_gen_sum);
100  ei_extension2.stop_Mmax = 200;
101 
102  ei_greedy2 = Greedy.Algorithm(ei_extension2, M_train);
103  ei_greedy2.stop_timeout = 60*60;
104  ei_greedy2.stop_epsilon = 1e-9;
105 
106  bg_descr.bg_algorithm = ei_greedy2;
107  red_model2 = Test.ReducedModel(dmodel, bg_descr);
108  try
109  evalc('detailed_data2 = gen_detailed_data(red_model2, model_data);');
110  catch err
111  ok = false;
112  disp('> failed');
113  end
114  if ok
115  disp('> passed');
116  end
117 
118  disp('Test 3');
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;
123 
124  ei_extension3 = Greedy.Plugin.EI(ei_gen2);
125  ei_extension3.stop_Mmax = 300;
126 
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];
130 
131  bg_descr.bg_algorithm = ei_greedy3;
132  red_model3 = Test.ReducedModel(dmodel, bg_descr);
133  try
134  evalc('detailed_data3 = gen_detailed_data(red_model3, model_data);');
135  catch err
136  ok = false;
137  disp('> failed');
138  end
139  if ok
140  disp('> passed');
141  end
142 
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;
147 
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;
152 
153 
154 
155 end