2 % This test initializes different greedy algorithms
for the generation of
3 % reduced basis and empirical
operator interpolation spaces
7 % - 2. EI-Greedy (one basis for two operators)
8 % - 3. PODEI-Greedy Algorithm (with one EI basis for two operators)
9 % - 4. Subsequent generation of RB and CRB with algorithms 1 and 2
10 % - 5. Subsequent generation of RB and two CRBs for two operators
11 % - 6. PODEI-Greedy Algorithm (with two EI bases for three operators)
13 % TODO: Test 6 is disfunctional at the moment.
18 % declare minimal model
20 mm.name =
'minimal_model';
23 mm.mu_names = {
'par1',
'par2',
'par3'};
24 mm.mu_ranges = {[0 1], [0 2], [0 3]};
30 mm.filecache_ignore_fields_in_model = {};
34 mm.gridtype =
'rectgrid';
38 mm.mass_matrix = @(x) x;
39 mm.operators_ptr = @(x) x;
40 mm.get_inner_product_matrix = @(x) eye(4);
41 mm.init_values_algorithm = @(x, y) ones(1,4);
43 mm.inner_product = @fv_inner_product;
45 dummyop1 = @(model, model_data, U, NU_ind) dummyop(pi,0);
46 dummyop2 = @(model, model_data, U, NU_ind) dummyop(exp(0),0);
47 dummyop3 = @(model, model_data, U, NU_ind) dummyop(2,1);
49 bg_descr.rb_problem_type =
'Test';
50 bg_descr.detailed_data_constructor = @Test.DetailedData;
51 bg_descr.reduced_data_constructor = @Test.ReducedData;
53 dmodel = Test.DetailedModel(mm);
55 model_data = gen_model_data(dmodel);
58 t1.rbgenerator = SnapshotsGenerator.Trajectories(dmodel,
'rb',
true,
false);
59 t1.rb_ext = Greedy.Plugin.POD(t1.rbgenerator);
60 t1.greedy_alg = Greedy.Algorithm(t1.rb_ext);
61 bg_descr.bg_algorithm = t1.greedy_alg;
62 t1.rmodel = Test.ReducedModel(dmodel, bg_descr);
64 evalc(
'prepare(t1.greedy_alg, t1.rmodel, model_data);');
65 evalc(
't1.dd = gen_detailed_data(t1.rmodel, model_data);');
75 t2.eigenerator1 = SnapshotsGenerator.SpaceOpEvals(dmodel,
'implicit', t1.rbgenerator, dummyop1,
true,
false);
76 t2.eigenerator2 = SnapshotsGenerator.SpaceOpEvals(dmodel,
'explicit', t1.rbgenerator, dummyop2,
true,
false);
77 t2.eigenerator = t2.eigenerator1 + t2.eigenerator2;
78 t2.ei_ext = Greedy.Plugin.EI(t2.eigenerator);
79 t2.greedy_alg = Greedy.Algorithm(t2.ei_ext);
80 bg_descr.bg_algorithm = t2.greedy_alg;
81 t2.rmodel = Test.ReducedModel(dmodel, bg_descr);
83 evalc(
'prepare(t2.greedy_alg, t2.rmodel, model_data);');
84 evalc(
't2.dd = gen_detailed_data(t2.rmodel, model_data);');
93 return; % currently the next takes too
long.
96 t3.ext = Greedy.Plugin.PODEI(t1.rb_ext, t2.ei_ext, t2.greedy_alg, 2);
97 t3.greedy_alg = Greedy.Algorithm(t3.ext);
98 bg_descr.bg_algorithm = t3.greedy_alg;
99 t3.rmodel = Test.ReducedModel(dmodel, bg_descr,
true);
101 evalc(
'prepare(t3.greedy_alg, t3.rmodel, model_data);');
102 evalc(
't3.dd = gen_detailed_data(t3.rmodel, model_data);');
112 t4.two_greedies = Greedy.Combined(t2.greedy_alg, t1.greedy_alg);
113 bg_descr.bg_algorithm = t4.two_greedies;
114 t4.rmodel = Test.ReducedModel(dmodel, bg_descr,
true);
116 evalc(
'prepare(t4.two_greedies, t4.rmodel, model_data);');
117 evalc(
't4.dd = gen_detailed_data(t4.rmodel, model_data);');
127 t5.ei_ext1 = Greedy.Plugin.EI(t2.eigenerator1);
128 t5.ei_ext2 = Greedy.Plugin.EI(t2.eigenerator2);
129 t5.ei_greedy_alg1 = Greedy.Algorithm(t5.ei_ext1);
130 t5.ei_greedy_alg2 = Greedy.Algorithm(t5.ei_ext2);
131 t5.three_greedies = [[t5.ei_greedy_alg1, t5.ei_greedy_alg2], t1.greedy_alg];
132 bg_descr.bg_algorithm = t5.three_greedies;
133 t5.rmodel = Test.ReducedModel(dmodel, bg_descr);
135 evalc(
'prepare(t5.three_greedies, t5.rmodel, model_data);');
136 evalc(
't5.dd = gen_detailed_data(t5.rmodel, model_data);');
146 % t6.eigenerator3 = SnapshotsGenerator.SpaceOpEvals(dmodel,
'op3', t1.rbgenerator, dummyop3,
true,
false);
147 % t6.ei_ext3 = Greedy.Plugin.EI(t6.eigenerator3);
148 % t6.ei_ext = [t2.ei_ext; t6.ei_ext3];
149 % t6.init_greedy = [ t2.greedy_alg, Greedy.Algorithm(t6.ei_ext3) ];
150 % t6.ext = Greedy.Plugin.PODEI(t1.rb_ext, t6.ei_ext, t6.init_greedy, 2);
151 % t6.greedy_alg = Greedy.Algorithm(t6.ext);
152 % bg_descr.bg_algorithm = t6.greedy_alg;
153 % t6.rmodel = Test.ReducedModel(dmodel, bg_descr,
true);
154 % prepare(t6.greedy_alg, t6.rmodel, model_data);
155 % t6.dd = gen_detailed_data(t6.rmodel, model_data);
159 function [a,b] = dummyop(a,b)