Mercurial > repos > public > sbplib
annotate +multiblock/LaplaceSquared.m @ 1301:8978521b0f06 default
Fix incorrect package name.
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Wed, 08 Jul 2020 19:11:04 +0200 |
parents | 2aaced07d1e5 |
children |
rev | line source |
---|---|
1070
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
1 classdef LaplaceSquared < scheme.Scheme |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
2 properties |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
3 grid |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
4 order |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
5 laplaceDiffOp |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
6 |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
7 D |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
8 H |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
9 Hi |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
10 |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
11 a,b |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
12 end |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
13 |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
14 methods |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
15 % Discretisation of a*nabla*b*nabla |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
16 function obj = LaplaceSquared(g, order, a, b, opGen) |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
17 default_arg('order', 4); |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
18 default_arg('a', 1); |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
19 default_arg('b', 1); |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
20 default_arg('opGen', @sbp.D4Variable); |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
21 |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
22 if isscalar(a) |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
23 a = grid.evalOn(g, a); |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
24 end |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
25 |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
26 if isscalar(b) |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
27 b = grid.evalOn(g, b); |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
28 end |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
29 |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
30 obj.grid = g; |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
31 obj.order = order; |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
32 obj.a = a; |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
33 obj.b = b; |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
34 |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
35 obj.laplaceDiffOp = multiblock.Laplace(g, order, 1, 1, opGen); |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
36 |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
37 obj.H = obj.laplaceDiffOp.H; |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
38 obj.Hi = spdiag(1./diag(obj.H)); |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
39 |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
40 A = spdiag(a); |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
41 B = spdiag(b); |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
42 |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
43 D_laplace = obj.laplaceDiffOp.D; |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
44 obj.D = A*D_laplace*B*D_laplace; |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
45 end |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
46 |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
47 function s = size(obj) |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
48 s = size(obj.laplaceDiffOp); |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
49 end |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
50 |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
51 function op = getBoundaryOperator(obj, opName, boundary) |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
52 switch opName |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
53 case 'e' |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
54 op = getBoundaryOperator(obj.laplaceDiffOp, 'e', boundary); |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
55 case 'd1' |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
56 op = getBoundaryOperator(obj.laplaceDiffOp, 'd', boundary); |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
57 case 'd2' |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
58 e = getBoundaryOperator(obj.laplaceDiffOp, 'e', boundary); |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
59 op = (e'*obj.laplaceDiffOp.D)'; |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
60 case 'd3' |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
61 d1 = getBoundaryOperator(obj.laplaceDiffOp, 'd', boundary); |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
62 op = (d1'*spdiag(obj.b)*obj.laplaceDiffOp.D)'; |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
63 end |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
64 end |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
65 |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
66 function op = getBoundaryQuadrature(obj, boundary) |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
67 op = getBoundaryQuadrature(obj.laplaceDiffOp, boundary); |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
68 end |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
69 |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
70 function [closure, penalty] = boundary_condition(obj,boundary,type) % TODO: Change name to boundaryCondition |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
71 switch type |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
72 case 'e' |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
73 error('Bc of type ''e'' not implemented') |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
74 case 'd1' |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
75 error('Bc of type ''d1'' not implemented') |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
76 case 'd2' |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
77 e = obj.getBoundaryOperator('e', boundary); |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
78 d1 = obj.getBoundaryOperator('d1', boundary); |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
79 d2 = obj.getBoundaryOperator('d2', boundary); |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
80 H_b = obj.getBoundaryQuadrature(boundary); |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
81 |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
82 A = spdiag(obj.a); |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
83 B_b = spdiag(e'*obj.b); |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
84 |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
85 tau = obj.Hi*A*d1*B_b*H_b; |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
86 closure = tau*d2'; |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
87 penalty = -tau; |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
88 case 'd3' |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
89 e = obj.getBoundaryOperator('e', boundary); |
1073
95113a592421
Fix bug in d3 boundary condition
Jonatan Werpers <jonatan@werpers.com>
parents:
1070
diff
changeset
|
90 d3 = obj.getBoundaryOperator('d3', boundary); |
1070
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
91 H_b = obj.getBoundaryQuadrature(boundary); |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
92 |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
93 A = spdiag(obj.a); |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
94 |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
95 tau = -obj.Hi*A*e*H_b; |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
96 closure = tau*d3'; |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
97 penalty = -tau; |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
98 end |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
99 end |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
100 |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
101 function [closure, penalty] = interface(obj,boundary,neighbour_scheme,neighbour_boundary) |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
102 error('Not implemented') |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
103 end |
f6b3af6febf3
Start work on LaplaceSquared. FULL OF ERRORS?!
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
104 end |
1074 | 105 end |