rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
evol_TB_2D_weak_form_operators.m
1 function [LI,LE,b] = evol_TB_2D_weak_form_operators(model,model_data)
2 % function [LI,LE,b] = evol_TB_2D_weak_form_operators(model,model_data)
3 %
4 % This function returns the operators for the comsol 2D evolution
5 % ThermalBlock in affinely decomposed form for an Euler backward
6 % simulation:
7 %
8 % L_I * u(k+1) = L_E * u(k) + b
9 %
10 % where
11 % L_I = M + dt*A
12 % L_E = M
13 % b = dt*rhs
14 % with M being the L2-Mass-Matrix, A being the Stiffness Matrix, rhs the
15 % right hand side!
16 %
17 % Input:
18 % - model
19 % - model_data
20 %
21 % Output:
22 % - LI,LE,b: operator components or coefficients, depending on the model.decomp_mode
23 % model.decomp_mode = 1: components
24 % model.decomp_mode = 2: coefficients
25 %
26 % Oliver Zeeb, 2013/11/21
27 
28 
29 
30 
31 switch model.decomp_mode
32  case 0
33  disp('Operators for decomp mode 0 not implemented since they are not needed!!!')
34  keyboard
35  case 1
36  if model.use_comsol
37  comsol_model= model_data.comsol_model;
38  %save the current settings stored in the model
39  wfeq1 = comsol_model.physics('w').feature('wfeq1').getString('weak');
40  wfeq2 = comsol_model.physics('w').feature('wfeq2').getString('weak');
41  wfeq3 = comsol_model.physics('w').feature('wfeq3').getString('weak');
42  wfeq4 = comsol_model.physics('w').feature('wfeq4').getString('weak');
43  wfeq5 = comsol_model.physics('w').feature('wfeq5').getString('weak');
44  weak1 = comsol_model.physics('w').feature('weak1').getString('weakExpression');
45 
46  %LE
47  comsol_model.physics('w').feature('wfeq1').set('weak', '-u*test(u)');
48  comsol_model.physics('w').feature('wfeq1').active(true);
49  comsol_model.physics('w').feature('wfeq2').active(false);
50  comsol_model.physics('w').feature('wfeq3').active(false);
51  comsol_model.physics('w').feature('wfeq4').active(false);
52  comsol_model.physics('w').feature('wfeq5').active(false);
53  comsol_model.physics('w').feature('weak1').active(false);
54  str_MassMatrix = get_assembled_matrices(comsol_model);
55  LE = {str_MassMatrix.Kc};
56 
57 
58  %LI
59  LI = cell(5,1);
60  LI{1} = str_MassMatrix.Kc;
61 
62  comsol_model.physics('w').feature('wfeq1').set('weak', '0');
63  comsol_model.physics('w').feature('wfeq2').set('weak', '-ux*test(ux) - uy*test(uy)');
64  comsol_model.physics('w').feature('wfeq2').active(true);
65  comsol_model.physics('w').feature('wfeq3').active(false);
66  comsol_model.physics('w').feature('wfeq4').active(false);
67  comsol_model.physics('w').feature('wfeq5').active(false);
68  str_Omega_1 = get_assembled_matrices(comsol_model);
69  LI{2} = str_Omega_1.Kc;
70 
71  comsol_model.physics('w').feature('wfeq2').active(false);
72  comsol_model.physics('w').feature('wfeq3').set('weak', '-ux*test(ux) - uy*test(uy)');
73  comsol_model.physics('w').feature('wfeq3').active(true);
74  comsol_model.physics('w').feature('wfeq4').active(false);
75  comsol_model.physics('w').feature('wfeq5').active(false);
76  str_Omega_2 = get_assembled_matrices(comsol_model);
77  LI{3} = str_Omega_2.Kc;
78 
79  comsol_model.physics('w').feature('wfeq2').active(false);
80  comsol_model.physics('w').feature('wfeq3').active(false);
81  comsol_model.physics('w').feature('wfeq4').set('weak', '-ux*test(ux) - uy*test(uy)');
82  comsol_model.physics('w').feature('wfeq4').active(true);
83  comsol_model.physics('w').feature('wfeq5').active(false);
84  str_Omega_3 = get_assembled_matrices(comsol_model);
85  LI{4} = str_Omega_3.Kc;
86 
87  comsol_model.physics('w').feature('wfeq2').active(false);
88  comsol_model.physics('w').feature('wfeq3').active(false);
89  comsol_model.physics('w').feature('wfeq4').active(false);
90  comsol_model.physics('w').feature('wfeq5').set('weak', '-ux*test(ux) - uy*test(uy)');
91  comsol_model.physics('w').feature('wfeq5').active(true);
92  str_Omega_4 = get_assembled_matrices(comsol_model);
93  LI{5} = str_Omega_4.Kc;
94 
95 
96  % b
97  comsol_model.physics('w').feature('wfeq2').active(false);
98  comsol_model.physics('w').feature('wfeq3').active(false);
99  comsol_model.physics('w').feature('wfeq4').active(false);
100  comsol_model.physics('w').feature('wfeq5').active(false);
101  comsol_model.physics('w').feature('weak1').set('weakExpression', 'test(u)');
102  comsol_model.physics('w').feature('weak1').active(true);
103  str_inflow = get_assembled_matrices(comsol_model);
104  b={str_inflow.Lc};
105 
106 
107  %restore the original settings
108  comsol_model.physics('w').feature('wfeq1').set('weak', wfeq1);
109  comsol_model.physics('w').feature('wfeq2').set('weak', wfeq2);
110  comsol_model.physics('w').feature('wfeq3').set('weak', wfeq3);
111  comsol_model.physics('w').feature('wfeq4').set('weak', wfeq4);
112  comsol_model.physics('w').feature('wfeq5').set('weak', wfeq5);
113  comsol_model.physics('w').feature('weak1').set('weakExpression',weak1);
114 
115  comsol_model.sol('sol1').feature('a1').set('Nullf', true);
116  comsol_model.sol('sol1').feature('a1').set('Null', true);
117  comsol_model.sol('sol1').feature('a1').set('Lc', true);
118  comsol_model.sol('sol1').feature('a1').set('ud', true);
119  comsol_model.sol('sol1').feature('a1').set('Kc', true);
120  comsol_model.sol('sol1').feature('a1').set('Ec', true);
121  comsol_model.sol('sol1').feature('a1').set('uscale', true);
122  comsol_model.sol('sol1').feature('a1').set('Dc', true);
123  comsol_model.sol('sol1').feature('a1').set('K', true);
124 
125  else %decomp_mode = 1, ~model.use_comsol
126  LI = model_data.operators.L_I_comp;
127  LE = model_data.operators.L_E_comp;
128  b = model_data.operators.b_comp;
129  end
130  case 2
131  mu=get_mu(model);
132  LI(1) = 1;
133  LI(2) = model.dt * mu(1);
134  LI(3) = model.dt * mu(2);
135  LI(4) = model.dt * mu(3);
136  LI(5) = model.dt * mu(4);
137 
138  LE = 1;
139 
140  b = model.dt;
141 end
142