1 function offline_data = rb_burgers_fem_offline_prep(detailed_data,params)
2 %
function offline_data = rb_burgers_fem_offline_prep(detailed_data,params)
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.
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
18 % Required fields of params:
19 % offline_path: pathname to files outputA_1.bin, outputB_1_1.bin, etc.
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]
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
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}``
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}``
57 % See the detailed-routine
for specifications of the fields of detailed_data
59 % Bernard Haasdonk 16.5.2007
62 %
get number of components
64 params.affine_decomp_mode =
'coefficients';
67 Q_dir = length(theta_dir);
69 theta_eta = diffusivity([],[],params);
70 Q_eta = length(theta_eta);
72 theta_c = velocity([],[],params);
73 Q_c = length(theta_c);
80 fn = fullfile(params.offline_path, [
'outputH_',num2str(q),
'.bin']);
81 offline_data.H{q} = load_dune_binary(fn);
86 fn = fullfile(params.offline_path, [
'outputH_1_',num2str(q),
'.bin']);
87 offline_data.H1{q} = load_dune_binary(fn);
92 fn = fullfile(params.offline_path, [
'outputH_2_',num2str(q),
'.bin']);
93 offline_data.H2{q} = load_dune_binary(fn);
97 fn = fullfile(params.offline_path, [
'outputM.bin']);
98 offline_data.M = load_dune_binary(fn);
102 fn = fullfile(params.offline_path, [
'outputB_1_',num2str(q),
'.bin']);
103 offline_data.B1{q} = load_dune_binary(fn);
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
112 fn = fullfile(params.offline_path, [
'outputB_2_',num2str(q1),...
113 '_',num2str(q2),
'.bin']);
114 offline_data.B2{q1,q2} = load_dune_binary(fn);%
121 fn = fullfile(params.offline_path, [
'outputA_',num2str(q),
'.bin']);
122 offline_data.A{q} = load_dune_binary(fn);
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
131 fn = fullfile(params.offline_path, [
'outputG_1_',num2str(q1),
'_',num2str(q2),
'.bin']);
132 offline_data.G1{q1,q2} = load_dune_binary(fn);
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
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);
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
159 fn = fullfile(params.offline_path, [
'outputG_4_',num2str(q1),
'_',num2str(q2),
'.bin']);
160 offline_data.G4{q1,q2} = load_dune_binary(fn);
164 %disp(
'implement reading of G!!!!');
172 % TO BE ADJUSTED TO NEW SYNTAX
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]))