rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
rb_burgers_fem_offline_prep.m
1 function offline_data = rb_burgers_fem_offline_prep(detailed_data,params)
2 %function offline_data = rb_burgers_fem_offline_prep(detailed_data,params)
3 %
4 % method which produces offline_data, which is the data, that
5 % will be passed to an online-algorithm. Therefore, no quantities dependent on
6 % the high-dimension H may be included here. Neither may online-data include
7 % parameter-dependent mu-quantities. So no complete grid or detailed solutions
8 % or reduced basis vectors may be stored here. So online data is
9 % produced in the offline stage, but may be used in
10 % online-stages. So the computation time may
11 % depend on H, but the results may not depend on this complexity.
12 %
13 % allowed dependency of generated data: Nmax
14 % not allowed dependency of data: H
15 % allowed dependency of computation: Nmax, H
16 % Unknown at this stage: mu, N
17 %
18 % Required fields of params:
19 % offline_path: pathname to files outputA_1.bin, outputB_1_1.bin, etc.
20 %
21 % optional fields of params:
22 % H{q} : sequence of Nmax-vector components of initial data projection
23 % @f$ \verb|q| = 1 \dots Q_{\mbox{dir}} @f$
24 % H1{q} : sequence of Nmax-vector componentes of udir data projection
25 % @f[\verb|q| = 1 \dots Q_{\mbox{dir}} \qquad
26 % \verb|H1{q}| = - \int u_{\mbox{dir}}^q \xi_i@f]
27 %
28 % H2{q} : sequence of Nmax-vector components of u0 initial data projection
29 % ``q = 1... Q_dir \qquad
30 % H2{q} = \int u_0^q xi_i``
31 % M : matrix of Nmax x Nmax mass matrix entries
32 % `M = \int \xi_i \xi_j`
33 % B1{q} : list of Nmax x Nmax stiffness matrix
34 % ``q = 1... Q_{\eta} \quad
35 % \verb|B1{q}| = \int \eta^q (\nabla \xi_i)( \nabla \xi_j)``
36 % B2{q1,q2} : array of Nmax x Nmax convection matrices
37 % ``q1 = 1... Q_c, q2 = 1.. Q_{dir} \qquad
38 % \verb|B2{q1,q2}(i,j)| = \int \nabla \cdot (c^q1 * u_{dir}^q2 * \xi_i) \xi_j``
39 % A{q}: list of Nmax x Nmax x Nmax tensors
40 % ``\verb|A{q}(i,j,k)| = \int \nabla \cdot (c^q \xi_i \xi_j) \xi_k \qquad
41 % q = 1,... Q_c``
42 % G1{q1,q2}: array of Nmax vectors
43 % ``\verb|G1{q1,q2}(i)| =
44 % - \int_{\gamma_out} \eta^q1 \cdot \nabla u_{dir}^q2 \cdot n \xi_i \qquad
45 % q1 = 1... Q_{\eta}, q2 = 1.. Q_{dir}``
46 %
47 % G2: trivially zero due to missing time dependence
48 % G3{q1,q2,q3}: array of Nmax vectors
49 % ``\verb|G3{q1,q2,q3}(i)| = - \int_{\Omega} 2 c^{q1} \cdot
50 % u_{dir}^{q2} \nabla udir^{q3} * \xi_i \qquad
51 % q1 = 1... Q_c, q2 = 1.. Q_{dir}, q3 = 1, ..., Q_{(grad)dir}``
52 % G4{q1,q2}: array of Nmax vectors
53 % ``\verb|G4{q1,q2}(i)| = \int_{\Omega} \eta^{q1} \nabla \cdot
54 % \nabla u_{dir}^{q2} \xi_i \qquad
55 % q1 = 1... Q_{\eta}, q2 = 1.. Q_{dir}``
56 %
57 % See the detailed-routine for specifications of the fields of detailed_data
58 
59 % Bernard Haasdonk 16.5.2007
60 
61 
62 % get number of components
63 
64  params.affine_decomp_mode = 'coefficients';
65 
66  theta_dir = dirichlet_values([],[],params);
67  Q_dir = length(theta_dir);
68 
69  theta_eta = diffusivity([],[],params);
70  Q_eta = length(theta_eta);
71 
72  theta_c = velocity([],[],params);
73  Q_c = length(theta_c);
74 
75 
76 offline_data = [];
77 
78 % read H
79 for q = 1:Q_dir
80  fn = fullfile(params.offline_path, ['outputH_',num2str(q),'.bin']);
81  offline_data.H{q} = load_dune_binary(fn);
82 end;
83 
84 % read H1
85 for q = 1:Q_dir
86  fn = fullfile(params.offline_path, ['outputH_1_',num2str(q),'.bin']);
87  offline_data.H1{q} = load_dune_binary(fn);
88 end;
89 
90 % read H2
91 for q = 1:Q_dir
92  fn = fullfile(params.offline_path, ['outputH_2_',num2str(q),'.bin']);
93  offline_data.H2{q} = load_dune_binary(fn);
94 end;
95 
96 % read M
97 fn = fullfile(params.offline_path, ['outputM.bin']);
98 offline_data.M = load_dune_binary(fn);
99 
100 % read B1
101 for q = 1:Q_eta
102  fn = fullfile(params.offline_path, ['outputB_1_',num2str(q),'.bin']);
103  offline_data.B1{q} = load_dune_binary(fn);
104 end;
105 
106 % read B2
107 % B2{q1,q2} : array of Nmax x Nmax convection matrices
108 % B2{q1,q2)(i,j) = \int div 2 (c^q1 * u_dir^q2 * xi_i) xi_j
109 % q1 = 1... Q_c, q2 = 1.. Q_dir
110 for q1 = 1:Q_c
111  for q2 = 1:Q_dir
112  fn = fullfile(params.offline_path, ['outputB_2_',num2str(q1),...
113  '_',num2str(q2),'.bin']);
114  offline_data.B2{q1,q2} = load_dune_binary(fn);%
115  end;
116 end;
117 %%%keyboard;
118 
119 % read A
120 for q = 1:Q_c
121  fn = fullfile(params.offline_path, ['outputA_',num2str(q),'.bin']);
122  offline_data.A{q} = load_dune_binary(fn);
123 end;
124 
125 % read G
126 % G1{q1,q2}: array of Nmax vectors
127 % G1{q1,q2}(i) = - \int_gamma_out eta^q1 * grad u_dir^q2 * n xi_i
128 % q1 = 1... Q_eta, q2 = 1.. Q_dir
129 for q1 = 1:Q_eta
130  for q2 = 1:Q_dir
131  fn = fullfile(params.offline_path, ['outputG_1_',num2str(q1),'_',num2str(q2),'.bin']);
132  offline_data.G1{q1,q2} = load_dune_binary(fn);
133  end;
134 end;
135 
136 %
137 % G2: trivially zero due to missing time dependence
138 % G3{q1,q2,q3}: array of Nmax vectors
139 % G3{q1,q2}(i) = - \int_Omage 2 c^q1 *
140 % u_dir^q2 * grad udir^q3 * xi_i
141 % q1 = 1... Q_c, q2 = 1.. Q_dir, q3 = 1, ..., Q_dir
142 for q1 = 1:Q_c
143  for q2 = 1:Q_dir
144  for q3 = 1:Q_dir
145  fn = fullfile(params.offline_path, ['outputG_3_',num2str(q1),'_',num2str(q2),'_',num2str(q3),'.bin']);
146  offline_data.G3{q1,q2,q3} = load_dune_binary(fn);
147  end;
148  end;
149 end;
150 
151 
152 
153 % G4{q1,q2}: array of Nmax vectors
154 % G4{q1,q2}(i) = \int_Omega eta^q1 * div grad u_dir^q2 * xi_i
155 % q1 = 1... Q_eta, q2 = 1.. Q_dir
156 %
157 for q1 = 1:Q_eta
158  for q2 = 1:Q_dir
159  fn = fullfile(params.offline_path, ['outputG_4_',num2str(q1),'_',num2str(q2),'.bin']);
160  offline_data.G4{q1,q2} = load_dune_binary(fn);
161  end;
162 end;
163 
164 %disp('implement reading of G!!!!');
165 
166 
167 
168 
169 
170 
171 
172 % TO BE ADJUSTED TO NEW SYNTAX
173 %| \docupdate
function Udirichlet = dirichlet_values(model, X, Y)
UDIRICHLET = DIRICHLET_VALUES([X],[Y], MODEL) Examples dirichlet_values([0,1,2],[1,1,1],struct(name_dirichlet_values, homogeneous, ... c_dir, 1)) dirichlet_values([0:0.1:1],[0],struct(name_dirichlet_values, xstripes, ... c_dir, [0 1 2], ... dir_borders, [0.3 0.6])) dirichlet_values([0:0.1:1],[0],struct(name_dirichlet_values, box, ... c_dir, 1, ... dir_box_xrange, [0.3 0.6], ... dir_box_yrange, [-0.1 0.1]))