annotate +rv/+diffops/constructSymmetricD2.m @ 1225:68ee061639a1 feature/rv

Make sure matrices are sparse.
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Wed, 06 Nov 2019 14:52:07 +0100
parents 433c89bf19e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1163
65a577db5ca0 Move all functions in constructDiffOps to subpackage and refactor
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1161
diff changeset
1 function D2 = constructSymmetricD2(g, order, opSet)
1037
2d7ba44340d0 Pass scheme specific parameters as cell array. This will enabale constructDiffOps to be more general. In addition, allow for schemes returning function handles as diffOps, which is currently how non-linear schemes such as Burgers1d are implemented.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1026
diff changeset
2 m = g.size();
2d7ba44340d0 Pass scheme specific parameters as cell array. This will enabale constructDiffOps to be more general. In addition, allow for schemes returning function handles as diffOps, which is currently how non-linear schemes such as Burgers1d are implemented.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1026
diff changeset
3 ops = cell(g.D(),1);
2d7ba44340d0 Pass scheme specific parameters as cell array. This will enabale constructDiffOps to be more general. In addition, allow for schemes returning function handles as diffOps, which is currently how non-linear schemes such as Burgers1d are implemented.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1026
diff changeset
4 I = cell(g.D(),1);
2d7ba44340d0 Pass scheme specific parameters as cell array. This will enabale constructDiffOps to be more general. In addition, allow for schemes returning function handles as diffOps, which is currently how non-linear schemes such as Burgers1d are implemented.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1026
diff changeset
5 for i = 1:g.D()
2d7ba44340d0 Pass scheme specific parameters as cell array. This will enabale constructDiffOps to be more general. In addition, allow for schemes returning function handles as diffOps, which is currently how non-linear schemes such as Burgers1d are implemented.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1026
diff changeset
6 lim = {g.x{i}(1), g.x{i}(end)};
1020
5359a61cb4d9 Add utility for constructing the operators used by a discretization emplying RV-stabilization
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
7 ops{i} = opSet(m(i), lim, order);
5359a61cb4d9 Add utility for constructing the operators used by a discretization emplying RV-stabilization
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
8 I{i} = speye(m(i));
5359a61cb4d9 Add utility for constructing the operators used by a discretization emplying RV-stabilization
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
9 end
5359a61cb4d9 Add utility for constructing the operators used by a discretization emplying RV-stabilization
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
10
1037
2d7ba44340d0 Pass scheme specific parameters as cell array. This will enabale constructDiffOps to be more general. In addition, allow for schemes returning function handles as diffOps, which is currently how non-linear schemes such as Burgers1d are implemented.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1026
diff changeset
11 switch g.D()
1020
5359a61cb4d9 Add utility for constructing the operators used by a discretization emplying RV-stabilization
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
12 case 1
5359a61cb4d9 Add utility for constructing the operators used by a discretization emplying RV-stabilization
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
13 e_r = ops{1}.e_r;
5359a61cb4d9 Add utility for constructing the operators used by a discretization emplying RV-stabilization
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
14 e_l = ops{1}.e_l;
1225
68ee061639a1 Make sure matrices are sparse.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1197
diff changeset
15 Hi = ops{1}.HI;
1037
2d7ba44340d0 Pass scheme specific parameters as cell array. This will enabale constructDiffOps to be more general. In addition, allow for schemes returning function handles as diffOps, which is currently how non-linear schemes such as Burgers1d are implemented.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1026
diff changeset
16 if isequal(opSet,@sbp.D1Upwind)
1225
68ee061639a1 Make sure matrices are sparse.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1197
diff changeset
17 B = e_r*e_r' - e_l*e_l';
68ee061639a1 Make sure matrices are sparse.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1197
diff changeset
18 Dm = sparse(ops{1}.Dm);
68ee061639a1 Make sure matrices are sparse.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1197
diff changeset
19 Dp = sparse(ops{1}.Dp);
68ee061639a1 Make sure matrices are sparse.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1197
diff changeset
20 M = sparse(Dm - Hi*B);
1154
3108963cc42c Improve efficiency of diffOps in Burgers2d, the artificial diffusion operator in rv.constructDiffOps and the RungekuttaExteriorRv time-steppers
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1146
diff changeset
21 D2 = @(Viscosity) M*Viscosity*Dp;
1037
2d7ba44340d0 Pass scheme specific parameters as cell array. This will enabale constructDiffOps to be more general. In addition, allow for schemes returning function handles as diffOps, which is currently how non-linear schemes such as Burgers1d are implemented.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1026
diff changeset
22 else
1157
82315fa6adb1 Add residual order as an input argument to constructDiffOps
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1154
diff changeset
23 % TODO: Fix Viscosity not being vector
1197
433c89bf19e0 Merge with default
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1163
diff changeset
24 d1_r = ops{1}.d1_r';
433c89bf19e0 Merge with default
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1163
diff changeset
25 d1_l = ops{1}.d1_l';
433c89bf19e0 Merge with default
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1163
diff changeset
26 D2 = @(Viscosity)ops{1}.D2(diag(Viscosity)) + Hi*(Viscosity(1,1)*e_l*d1_l - e_r*Viscosity(end,end)*d1_r);
1037
2d7ba44340d0 Pass scheme specific parameters as cell array. This will enabale constructDiffOps to be more general. In addition, allow for schemes returning function handles as diffOps, which is currently how non-linear schemes such as Burgers1d are implemented.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1026
diff changeset
27 end
1020
5359a61cb4d9 Add utility for constructing the operators used by a discretization emplying RV-stabilization
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
28 case 2
1037
2d7ba44340d0 Pass scheme specific parameters as cell array. This will enabale constructDiffOps to be more general. In addition, allow for schemes returning function handles as diffOps, which is currently how non-linear schemes such as Burgers1d are implemented.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1026
diff changeset
29 % TODO:
2d7ba44340d0 Pass scheme specific parameters as cell array. This will enabale constructDiffOps to be more general. In addition, allow for schemes returning function handles as diffOps, which is currently how non-linear schemes such as Burgers1d are implemented.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1026
diff changeset
30 % Currently only implemented for upwind operators.
2d7ba44340d0 Pass scheme specific parameters as cell array. This will enabale constructDiffOps to be more general. In addition, allow for schemes returning function handles as diffOps, which is currently how non-linear schemes such as Burgers1d are implemented.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1026
diff changeset
31 % Remove this part once the time-dependent D2 operator is implemented for other opSets
2d7ba44340d0 Pass scheme specific parameters as cell array. This will enabale constructDiffOps to be more general. In addition, allow for schemes returning function handles as diffOps, which is currently how non-linear schemes such as Burgers1d are implemented.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1026
diff changeset
32 % or if it is decided that it should only be supported for upwind operators.
2d7ba44340d0 Pass scheme specific parameters as cell array. This will enabale constructDiffOps to be more general. In addition, allow for schemes returning function handles as diffOps, which is currently how non-linear schemes such as Burgers1d are implemented.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1026
diff changeset
33 assert(isequal(opSet,@sbp.D1Upwind))
1020
5359a61cb4d9 Add utility for constructing the operators used by a discretization emplying RV-stabilization
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
34 e_e = kron(ops{1}.e_r,I{2});
5359a61cb4d9 Add utility for constructing the operators used by a discretization emplying RV-stabilization
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
35 e_w = kron(ops{1}.e_l,I{2});
5359a61cb4d9 Add utility for constructing the operators used by a discretization emplying RV-stabilization
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
36 Dm_x = kron(ops{1}.Dm,I{2});
5359a61cb4d9 Add utility for constructing the operators used by a discretization emplying RV-stabilization
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
37 Dp_x = kron(ops{1}.Dp,I{2});
5359a61cb4d9 Add utility for constructing the operators used by a discretization emplying RV-stabilization
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
38 H_x = kron(ops{1}.HI,I{2});
5359a61cb4d9 Add utility for constructing the operators used by a discretization emplying RV-stabilization
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
39 B_x = e_e*e_e' - e_w*e_w';
1154
3108963cc42c Improve efficiency of diffOps in Burgers2d, the artificial diffusion operator in rv.constructDiffOps and the RungekuttaExteriorRv time-steppers
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1146
diff changeset
40 M_x = Dm_x-H_x*B_x;
3108963cc42c Improve efficiency of diffOps in Burgers2d, the artificial diffusion operator in rv.constructDiffOps and the RungekuttaExteriorRv time-steppers
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1146
diff changeset
41 D2_x = @(Viscosity) M_x*Viscosity*Dp_x;
1020
5359a61cb4d9 Add utility for constructing the operators used by a discretization emplying RV-stabilization
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
42
5359a61cb4d9 Add utility for constructing the operators used by a discretization emplying RV-stabilization
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
43 e_n = kron(I{1},ops{2}.e_r);
5359a61cb4d9 Add utility for constructing the operators used by a discretization emplying RV-stabilization
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
44 e_s = kron(I{1},ops{2}.e_l);
5359a61cb4d9 Add utility for constructing the operators used by a discretization emplying RV-stabilization
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
45 Dm_y = kron(I{1},ops{2}.Dm);
5359a61cb4d9 Add utility for constructing the operators used by a discretization emplying RV-stabilization
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
46 Dp_y = kron(I{1},ops{2}.Dp);
5359a61cb4d9 Add utility for constructing the operators used by a discretization emplying RV-stabilization
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
47 H_y = kron(I{1},ops{2}.HI);
5359a61cb4d9 Add utility for constructing the operators used by a discretization emplying RV-stabilization
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
48 B_y = e_n*e_n' - e_s*e_s';
1154
3108963cc42c Improve efficiency of diffOps in Burgers2d, the artificial diffusion operator in rv.constructDiffOps and the RungekuttaExteriorRv time-steppers
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1146
diff changeset
49 M_y = Dm_y-H_y*B_y;
3108963cc42c Improve efficiency of diffOps in Burgers2d, the artificial diffusion operator in rv.constructDiffOps and the RungekuttaExteriorRv time-steppers
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1146
diff changeset
50 D2_y = @(Viscosity) M_y*Viscosity*Dp_y;
3108963cc42c Improve efficiency of diffOps in Burgers2d, the artificial diffusion operator in rv.constructDiffOps and the RungekuttaExteriorRv time-steppers
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 1146
diff changeset
51 D2 = @(Viscosity) D2_x(Viscosity) + D2_y(Viscosity);
1020
5359a61cb4d9 Add utility for constructing the operators used by a discretization emplying RV-stabilization
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
52 otherwise
5359a61cb4d9 Add utility for constructing the operators used by a discretization emplying RV-stabilization
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
53 error('3D not yet implemented')
5359a61cb4d9 Add utility for constructing the operators used by a discretization emplying RV-stabilization
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
54 end
5359a61cb4d9 Add utility for constructing the operators used by a discretization emplying RV-stabilization
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
55 end