rbmatlab  1.13.10
 All Classes Namespaces Files Functions Variables Groups Pages
test_basisgen_init.m
Go to the documentation of this file.
1 function ok = test_basisgen_init()
2 % This test initializes different greedy algorithms for the generation of
3 % reduced basis and empirical operator interpolation spaces
4 %
5 % Test cases:
6 % - 1. POD-Greedy
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)
12 %
13 % TODO: Test 6 is disfunctional at the moment.
14 
15 
16  ok = true;
17 
18  % declare minimal model
19  mm = [];
20  mm.name = 'minimal_model';
21  mm.T = 1;
22  mm.nt = 10;
23  mm.mu_names = {'par1', 'par2', 'par3'};
24  mm.mu_ranges = {[0 1], [0 2], [0 3]};
25  mm.par1 = 0;
26  mm.par2 = 0;
27  mm.par3 = 0;
28  mm.debug = 0;
29  mm.force_delete = 1;
30  mm.filecache_ignore_fields_in_model = {};
31 
32  mm.decomp_mode = 0;
33  mm.verbose = 0;
34  mm.gridtype = 'rectgrid';
35  mm.t = 0;
36  mm.tstep = 1;
37  mm.dt = mm.T/mm.nt;
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);
42  mm.error_norm = 'l2';
43  mm.inner_product = @fv_inner_product;
44 
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);
48 
49  bg_descr.rb_problem_type = 'Test';
50  bg_descr.detailed_data_constructor = @Test.DetailedData;
51  bg_descr.reduced_data_constructor = @Test.ReducedData;
52 
53  dmodel = Test.DetailedModel(mm);
54 
55  model_data = gen_model_data(dmodel);
56 
57  disp('Test1');
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);
63  try
64  evalc('prepare(t1.greedy_alg, t1.rmodel, model_data);');
65  evalc('t1.dd = gen_detailed_data(t1.rmodel, model_data);');
66  catch err
67  ok = false;
68  disp('Failed');
69  end
70  if ok
71  disp('Success');
72  end
73 
74  disp('Test2');
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);
82  try
83  evalc('prepare(t2.greedy_alg, t2.rmodel, model_data);');
84  evalc('t2.dd = gen_detailed_data(t2.rmodel, model_data);');
85  catch err
86  ok = false;
87  disp('Failed');
88  end
89  if ok
90  disp('Success');
91  end
92 
93 return; % currently the next takes too long.
94 
95  disp('Test3');
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);
100  try
101  evalc('prepare(t3.greedy_alg, t3.rmodel, model_data);');
102  evalc('t3.dd = gen_detailed_data(t3.rmodel, model_data);');
103  catch err
104  ok = false;
105  disp('Failed');
106  end
107  if ok
108  disp('Success');
109  end
110 
111  disp('Test4');
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);
115  try
116  evalc('prepare(t4.two_greedies, t4.rmodel, model_data);');
117  evalc('t4.dd = gen_detailed_data(t4.rmodel, model_data);');
118  catch err
119  ok = false;
120  disp('Failed');
121  end
122  if ok
123  disp('Success');
124  end
125 
126  disp('Test5');
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);
134  try
135  evalc('prepare(t5.three_greedies, t5.rmodel, model_data);');
136  evalc('t5.dd = gen_detailed_data(t5.rmodel, model_data);');
137  catch err
138  ok = false;
139  disp('Failed');
140  end
141  if ok
142  disp('Success');
143  end
144 
145 % disp('Test6');
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);
156 
157 end
158 
159 function [a,b] = dummyop(a,b)
160 a = a * ones(4,1);
161 b = b * ones(4,1);
162 end