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)
4 % This
function returns the operators
for the comsol 2D evolution
5 %
ThermalBlock in affinely decomposed form
for an Euler backward
8 % L_I * u(k+1) = L_E * u(k) + b
14 % with M being the L2-Mass-Matrix, A being the Stiffness Matrix, rhs the
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
26 % Oliver Zeeb, 2013/11/21
31 switch model.decomp_mode
33 disp(
'Operators for decomp mode 0 not implemented since they are not needed!!!')
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');
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};
60 LI{1} = str_MassMatrix.Kc;
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;
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;
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;
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;
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);
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);
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);
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;
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);