annotate +scheme/LaplaceCurvilinear.m @ 545:dfb27a7e801f feature/grids

Add todo to Beam
author Jonatan Werpers <jonatan@werpers.com>
date Mon, 21 Aug 2017 11:20:20 +0200
parents 08b6281ba2a9
children c5a7a13c03dc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
450
8d455e49364f Copy Wave2dCurve to new scheme LaplaceCurvilinear
Jonatan Werpers <jonatan@werpers.com>
parents: 449
diff changeset
1 classdef LaplaceCurvilinear < scheme.Scheme
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
2 properties
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
3 m % Number of points in each direction, possibly a vector
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
4 h % Grid spacing
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
5
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
6 grid
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
7
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
8 order % Order accuracy for the approximation
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
9
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
10 D % non-stabalized scheme operator
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
11 M % Derivative norm
452
56eb7c088bd4 Allow any coefficient in LaplaceCurvilinear
Jonatan Werpers <jonatan@werpers.com>
parents: 450
diff changeset
12 a,b
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
13 J, Ji
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
14 a11, a12, a22
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
15
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
16 H % Discrete norm
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
17 Hi
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
18 H_u, H_v % Norms in the x and y directions
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
19 Hu,Hv % Kroneckerd norms. 1'*Hx*v corresponds to integration in the x dir.
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
20 Hi_u, Hi_v
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
21 Hiu, Hiv
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
22 e_w, e_e, e_s, e_n
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
23 du_w, dv_w
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
24 du_e, dv_e
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
25 du_s, dv_s
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
26 du_n, dv_n
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
27 gamm_u, gamm_v
27
97a638f91fb8 Added function spdiag(). Fixed a bunch of bugs in the Wave2dCurve scheme.
Jonatan Werpers <jonatan@werpers.com>
parents: 5
diff changeset
28 lambda
384
32df00102268 Fix bug in Characteristic BC for Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 360
diff changeset
29
449
0707a7192bc3 Add first derivative operators to Wave2DCurve
Jonatan Werpers <jonatan@werpers.com>
parents: 395
diff changeset
30 Dx, Dy % Physical derivatives
0707a7192bc3 Add first derivative operators to Wave2DCurve
Jonatan Werpers <jonatan@werpers.com>
parents: 395
diff changeset
31
384
32df00102268 Fix bug in Characteristic BC for Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 360
diff changeset
32 x_u
32df00102268 Fix bug in Characteristic BC for Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 360
diff changeset
33 x_v
32df00102268 Fix bug in Characteristic BC for Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 360
diff changeset
34 y_u
32df00102268 Fix bug in Characteristic BC for Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 360
diff changeset
35 y_v
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
36 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
37
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
38 methods
452
56eb7c088bd4 Allow any coefficient in LaplaceCurvilinear
Jonatan Werpers <jonatan@werpers.com>
parents: 450
diff changeset
39 % Implements a*div(b*grad(u)) as a SBP scheme
539
08b6281ba2a9 Add some todos
Jonatan Werpers <jonatan@werpers.com>
parents: 452
diff changeset
40 % TODO: Implement proper H, it should be the real physical quadrature, the logic quadrature may be but in a separate variable (H_logic?)
08b6281ba2a9 Add some todos
Jonatan Werpers <jonatan@werpers.com>
parents: 452
diff changeset
41
452
56eb7c088bd4 Allow any coefficient in LaplaceCurvilinear
Jonatan Werpers <jonatan@werpers.com>
parents: 450
diff changeset
42 function obj = LaplaceCurvilinear(g ,order, a, b, opSet)
303
f18142c1530b Fixed Wave2dCurve for new operators. Some cleanup in d2_variable_4.
Jonatan Werpers <jonatan@werpers.com>
parents: 96
diff changeset
43 default_arg('opSet',@sbp.D2Variable);
452
56eb7c088bd4 Allow any coefficient in LaplaceCurvilinear
Jonatan Werpers <jonatan@werpers.com>
parents: 450
diff changeset
44 default_arg('a', 1);
56eb7c088bd4 Allow any coefficient in LaplaceCurvilinear
Jonatan Werpers <jonatan@werpers.com>
parents: 450
diff changeset
45 default_arg('b', 1);
56eb7c088bd4 Allow any coefficient in LaplaceCurvilinear
Jonatan Werpers <jonatan@werpers.com>
parents: 450
diff changeset
46
56eb7c088bd4 Allow any coefficient in LaplaceCurvilinear
Jonatan Werpers <jonatan@werpers.com>
parents: 450
diff changeset
47
56eb7c088bd4 Allow any coefficient in LaplaceCurvilinear
Jonatan Werpers <jonatan@werpers.com>
parents: 450
diff changeset
48 if b ~=1
56eb7c088bd4 Allow any coefficient in LaplaceCurvilinear
Jonatan Werpers <jonatan@werpers.com>
parents: 450
diff changeset
49 error('Not implemented yet')
56eb7c088bd4 Allow any coefficient in LaplaceCurvilinear
Jonatan Werpers <jonatan@werpers.com>
parents: 450
diff changeset
50 end
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
51
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
52 assert(isa(g, 'grid.Curvilinear'))
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
53
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
54 m = g.size();
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
55 m_u = m(1);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
56 m_v = m(2);
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
57 m_tot = g.N();
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
58
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
59 h = g.scaling();
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
60 h_u = h(1);
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
61 h_v = h(2);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
62
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
63 % Operators
303
f18142c1530b Fixed Wave2dCurve for new operators. Some cleanup in d2_variable_4.
Jonatan Werpers <jonatan@werpers.com>
parents: 96
diff changeset
64 ops_u = opSet(m_u, {0, 1}, order);
f18142c1530b Fixed Wave2dCurve for new operators. Some cleanup in d2_variable_4.
Jonatan Werpers <jonatan@werpers.com>
parents: 96
diff changeset
65 ops_v = opSet(m_v, {0, 1}, order);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
66
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
67 I_u = speye(m_u);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
68 I_v = speye(m_v);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
69
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
70 D1_u = ops_u.D1;
303
f18142c1530b Fixed Wave2dCurve for new operators. Some cleanup in d2_variable_4.
Jonatan Werpers <jonatan@werpers.com>
parents: 96
diff changeset
71 D2_u = ops_u.D2;
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
72 H_u = ops_u.H;
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
73 Hi_u = ops_u.HI;
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
74 e_l_u = ops_u.e_l;
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
75 e_r_u = ops_u.e_r;
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
76 d1_l_u = ops_u.d1_l;
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
77 d1_r_u = ops_u.d1_r;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
78
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
79 D1_v = ops_v.D1;
303
f18142c1530b Fixed Wave2dCurve for new operators. Some cleanup in d2_variable_4.
Jonatan Werpers <jonatan@werpers.com>
parents: 96
diff changeset
80 D2_v = ops_v.D2;
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
81 H_v = ops_v.H;
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
82 Hi_v = ops_v.HI;
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
83 e_l_v = ops_v.e_l;
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
84 e_r_v = ops_v.e_r;
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
85 d1_l_v = ops_v.d1_l;
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
86 d1_r_v = ops_v.d1_r;
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
87
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
88 Du = kr(D1_u,I_v);
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
89 Dv = kr(I_u,D1_v);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
90
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
91 % Metric derivatives
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
92 coords = g.points();
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
93 x = coords(:,1);
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
94 y = coords(:,2);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
95
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
96 x_u = Du*x;
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
97 x_v = Dv*x;
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
98 y_u = Du*y;
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
99 y_v = Dv*y;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
100
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
101 J = x_u.*y_v - x_v.*y_u;
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
102 a11 = 1./J .* (x_v.^2 + y_v.^2);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
103 a12 = -1./J .* (x_u.*x_v + y_u.*y_v);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
104 a22 = 1./J .* (x_u.^2 + y_u.^2);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
105 lambda = 1/2 * (a11 + a22 - sqrt((a11-a22).^2 + 4*a12.^2));
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
106
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
107 % Assemble full operators
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
108 L_12 = spdiags(a12, 0, m_tot, m_tot);
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
109 Duv = Du*L_12*Dv;
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
110 Dvu = Dv*L_12*Du;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
111
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
112 Duu = sparse(m_tot);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
113 Dvv = sparse(m_tot);
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
114 ind = grid.funcToMatrix(g, 1:m_tot);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
115
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
116 for i = 1:m_v
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
117 D = D2_u(a11(ind(:,i)));
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
118 p = ind(:,i);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
119 Duu(p,p) = D;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
120 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
121
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
122 for i = 1:m_u
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
123 D = D2_v(a22(ind(i,:)));
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
124 p = ind(i,:);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
125 Dvv(p,p) = D;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
126 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
127
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
128 obj.H = kr(H_u,H_v);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
129 obj.Hi = kr(Hi_u,Hi_v);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
130 obj.Hu = kr(H_u,I_v);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
131 obj.Hv = kr(I_u,H_v);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
132 obj.Hiu = kr(Hi_u,I_v);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
133 obj.Hiv = kr(I_u,Hi_v);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
134
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
135 obj.e_w = kr(e_l_u,I_v);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
136 obj.e_e = kr(e_r_u,I_v);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
137 obj.e_s = kr(I_u,e_l_v);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
138 obj.e_n = kr(I_u,e_r_v);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
139 obj.du_w = kr(d1_l_u,I_v);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
140 obj.dv_w = (obj.e_w'*Dv)';
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
141 obj.du_e = kr(d1_r_u,I_v);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
142 obj.dv_e = (obj.e_e'*Dv)';
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
143 obj.du_s = (obj.e_s'*Du)';
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
144 obj.dv_s = kr(I_u,d1_l_v);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
145 obj.du_n = (obj.e_n'*Du)';
370
c2c64ccb6a1e Removed stupid comment
Ylva Rydin <ylva.rydin@telia.com>
parents: 369
diff changeset
146 obj.dv_n = kr(I_u,d1_r_v);
376
b0e95c81943e removed the white space
Ylva Rydin <ylva.rydin@telia.com>
parents: 371
diff changeset
147
384
32df00102268 Fix bug in Characteristic BC for Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 360
diff changeset
148 obj.x_u = x_u;
32df00102268 Fix bug in Characteristic BC for Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 360
diff changeset
149 obj.x_v = x_v;
32df00102268 Fix bug in Characteristic BC for Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 360
diff changeset
150 obj.y_u = y_u;
32df00102268 Fix bug in Characteristic BC for Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 360
diff changeset
151 obj.y_v = y_v;
32df00102268 Fix bug in Characteristic BC for Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 360
diff changeset
152
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
153 obj.m = m;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
154 obj.h = [h_u h_v];
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
155 obj.order = order;
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
156 obj.grid = g;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
157
452
56eb7c088bd4 Allow any coefficient in LaplaceCurvilinear
Jonatan Werpers <jonatan@werpers.com>
parents: 450
diff changeset
158 obj.a = a;
56eb7c088bd4 Allow any coefficient in LaplaceCurvilinear
Jonatan Werpers <jonatan@werpers.com>
parents: 450
diff changeset
159 obj.b = b;
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
160 obj.J = spdiags(J, 0, m_tot, m_tot);
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
161 obj.Ji = spdiags(1./J, 0, m_tot, m_tot);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
162 obj.a11 = a11;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
163 obj.a12 = a12;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
164 obj.a22 = a22;
452
56eb7c088bd4 Allow any coefficient in LaplaceCurvilinear
Jonatan Werpers <jonatan@werpers.com>
parents: 450
diff changeset
165 obj.D = obj.Ji*a*(Duu + Duv + Dvu + Dvv);
27
97a638f91fb8 Added function spdiag(). Fixed a bunch of bugs in the Wave2dCurve scheme.
Jonatan Werpers <jonatan@werpers.com>
parents: 5
diff changeset
166 obj.lambda = lambda;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
167
449
0707a7192bc3 Add first derivative operators to Wave2DCurve
Jonatan Werpers <jonatan@werpers.com>
parents: 395
diff changeset
168 obj.Dx = spdiag( y_v./J)*Du + spdiag(-y_u./J)*Dv;
0707a7192bc3 Add first derivative operators to Wave2DCurve
Jonatan Werpers <jonatan@werpers.com>
parents: 395
diff changeset
169 obj.Dy = spdiag(-x_v./J)*Du + spdiag( x_u./J)*Dv;
0707a7192bc3 Add first derivative operators to Wave2DCurve
Jonatan Werpers <jonatan@werpers.com>
parents: 395
diff changeset
170
389
42c89b5eedc0 Add borrowing constants for D2 operators in D4Variable
Jonatan Werpers <jonatan@werpers.com>
parents: 384
diff changeset
171 obj.gamm_u = h_u*ops_u.borrowing.M.d1;
42c89b5eedc0 Add borrowing constants for D2 operators in D4Variable
Jonatan Werpers <jonatan@werpers.com>
parents: 384
diff changeset
172 obj.gamm_v = h_v*ops_v.borrowing.M.d1;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
173 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
174
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
175
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
176 % Closure functions return the opertors applied to the own doamin to close the boundary
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
177 % Penalty functions return the opertors to force the solution. In the case of an interface it returns the operator applied to the other doamin.
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
178 % boundary is a string specifying the boundary e.g. 'l','r' or 'e','w','n','s'.
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
179 % type is a string specifying the type of boundary condition if there are several.
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
180 % data is a function returning the data that should be applied at the boundary.
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
181 % neighbour_scheme is an instance of Scheme that should be interfaced to.
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
182 % neighbour_boundary is a string specifying which boundary to interface to.
347
85c2fe06d551 Implemented characteristic form BC in Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 337
diff changeset
183 function [closure, penalty] = boundary_condition(obj, boundary, type, parameter)
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
184 default_arg('type','neumann');
347
85c2fe06d551 Implemented characteristic form BC in Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 337
diff changeset
185 default_arg('parameter', []);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
186
384
32df00102268 Fix bug in Characteristic BC for Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 360
diff changeset
187 [e, d_n, d_t, coeff_n, coeff_t, s, gamm, halfnorm_inv , ~, ~, ~, scale_factor] = obj.get_boundary_ops(boundary);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
188 switch type
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
189 % Dirichlet boundary condition
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
190 case {'D','d','dirichlet'}
82
df642750e8f7 Added Dirichelt BC to Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 55
diff changeset
191 % v denotes the solution in the neighbour domain
df642750e8f7 Added Dirichelt BC to Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 55
diff changeset
192 tuning = 1.2;
df642750e8f7 Added Dirichelt BC to Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 55
diff changeset
193 % tuning = 20.2;
df642750e8f7 Added Dirichelt BC to Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 55
diff changeset
194 [e, d_n, d_t, coeff_n, coeff_t, s, gamm, halfnorm_inv_n, halfnorm_inv_t, halfnorm_t] = obj.get_boundary_ops(boundary);
df642750e8f7 Added Dirichelt BC to Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 55
diff changeset
195
df642750e8f7 Added Dirichelt BC to Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 55
diff changeset
196 a_n = spdiag(coeff_n);
df642750e8f7 Added Dirichelt BC to Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 55
diff changeset
197 a_t = spdiag(coeff_t);
df642750e8f7 Added Dirichelt BC to Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 55
diff changeset
198
df642750e8f7 Added Dirichelt BC to Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 55
diff changeset
199 F = (s * a_n * d_n' + s * a_t*d_t')';
df642750e8f7 Added Dirichelt BC to Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 55
diff changeset
200
df642750e8f7 Added Dirichelt BC to Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 55
diff changeset
201 u = obj;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
202
82
df642750e8f7 Added Dirichelt BC to Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 55
diff changeset
203 b1 = gamm*u.lambda./u.a11.^2;
df642750e8f7 Added Dirichelt BC to Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 55
diff changeset
204 b2 = gamm*u.lambda./u.a22.^2;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
205
82
df642750e8f7 Added Dirichelt BC to Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 55
diff changeset
206 tau = -1./b1 - 1./b2;
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
207 tau = tuning * spdiag(tau);
360
447ceb41fb65 Fixed penalty parameter in Wave2Dcurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 347
diff changeset
208 sig1 = 1;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
209
82
df642750e8f7 Added Dirichelt BC to Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 55
diff changeset
210 penalty_parameter_1 = halfnorm_inv_n*(tau + sig1*halfnorm_inv_t*F*e'*halfnorm_t)*e;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
211
452
56eb7c088bd4 Allow any coefficient in LaplaceCurvilinear
Jonatan Werpers <jonatan@werpers.com>
parents: 450
diff changeset
212 closure = obj.Ji*obj.a * penalty_parameter_1*e';
56eb7c088bd4 Allow any coefficient in LaplaceCurvilinear
Jonatan Werpers <jonatan@werpers.com>
parents: 450
diff changeset
213 penalty = -obj.Ji*obj.a * penalty_parameter_1;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
214
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
215
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
216 % Neumann boundary condition
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
217 case {'N','n','neumann'}
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
218 a_n = spdiags(coeff_n,0,length(coeff_n),length(coeff_n));
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
219 a_t = spdiags(coeff_t,0,length(coeff_t),length(coeff_t));
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
220 d = (a_n * d_n' + a_t*d_t')';
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
221
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
222 tau1 = -s;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
223 tau2 = 0;
452
56eb7c088bd4 Allow any coefficient in LaplaceCurvilinear
Jonatan Werpers <jonatan@werpers.com>
parents: 450
diff changeset
224 tau = obj.a * obj.Ji*(tau1*e + tau2*d);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
225
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
226 closure = halfnorm_inv*tau*d';
347
85c2fe06d551 Implemented characteristic form BC in Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 337
diff changeset
227 penalty = -halfnorm_inv*tau;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
228
347
85c2fe06d551 Implemented characteristic form BC in Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 337
diff changeset
229 % Characteristic boundary condition
85c2fe06d551 Implemented characteristic form BC in Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 337
diff changeset
230 case {'characteristic', 'char', 'c'}
85c2fe06d551 Implemented characteristic form BC in Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 337
diff changeset
231 default_arg('parameter', 1);
85c2fe06d551 Implemented characteristic form BC in Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 337
diff changeset
232 beta = parameter;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
233
347
85c2fe06d551 Implemented characteristic form BC in Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 337
diff changeset
234 a_n = spdiags(coeff_n,0,length(coeff_n),length(coeff_n));
85c2fe06d551 Implemented characteristic form BC in Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 337
diff changeset
235 a_t = spdiags(coeff_t,0,length(coeff_t),length(coeff_t));
85c2fe06d551 Implemented characteristic form BC in Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 337
diff changeset
236 d = s*(a_n * d_n' + a_t*d_t')'; % outward facing normal derivative
85c2fe06d551 Implemented characteristic form BC in Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 337
diff changeset
237
452
56eb7c088bd4 Allow any coefficient in LaplaceCurvilinear
Jonatan Werpers <jonatan@werpers.com>
parents: 450
diff changeset
238 tau = -obj.a * 1/beta*obj.Ji*e;
347
85c2fe06d551 Implemented characteristic form BC in Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 337
diff changeset
239
452
56eb7c088bd4 Allow any coefficient in LaplaceCurvilinear
Jonatan Werpers <jonatan@werpers.com>
parents: 450
diff changeset
240 closure{1} = halfnorm_inv*tau*spdiag(scale_factor)*e';
347
85c2fe06d551 Implemented characteristic form BC in Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 337
diff changeset
241 closure{2} = halfnorm_inv*tau*beta*d';
85c2fe06d551 Implemented characteristic form BC in Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 337
diff changeset
242 penalty = -halfnorm_inv*tau;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
243
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
244 % Unknown, boundary condition
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
245 otherwise
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
246 error('No such boundary condition: type = %s',type);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
247 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
248 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
249
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
250 function [closure, penalty] = interface(obj,boundary,neighbour_scheme,neighbour_boundary)
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
251 % u denotes the solution in the own domain
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
252 % v denotes the solution in the neighbour domain
5
5f6b0b6a012b First try at interface implementation in WaveCurve2s
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
253 tuning = 1.2;
27
97a638f91fb8 Added function spdiag(). Fixed a bunch of bugs in the Wave2dCurve scheme.
Jonatan Werpers <jonatan@werpers.com>
parents: 5
diff changeset
254 % tuning = 20.2;
85
643bc513b8b8 Wave2DCurve: Fixed error in tau. Also made random guess at fixing theory from paper.
Jonatan Werpers <jonatan@werpers.com>
parents: 83
diff changeset
255 [e_u, d_n_u, d_t_u, coeff_n_u, coeff_t_u, s_u, gamm_u, halfnorm_inv_u_n, halfnorm_inv_u_t, halfnorm_u_t, I_u] = obj.get_boundary_ops(boundary);
643bc513b8b8 Wave2DCurve: Fixed error in tau. Also made random guess at fixing theory from paper.
Jonatan Werpers <jonatan@werpers.com>
parents: 83
diff changeset
256 [e_v, d_n_v, d_t_v, coeff_n_v, coeff_t_v, s_v, gamm_v, halfnorm_inv_v_n, halfnorm_inv_v_t, halfnorm_v_t, I_v] = neighbour_scheme.get_boundary_ops(neighbour_boundary);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
257
27
97a638f91fb8 Added function spdiag(). Fixed a bunch of bugs in the Wave2dCurve scheme.
Jonatan Werpers <jonatan@werpers.com>
parents: 5
diff changeset
258 a_n_u = spdiag(coeff_n_u);
97a638f91fb8 Added function spdiag(). Fixed a bunch of bugs in the Wave2dCurve scheme.
Jonatan Werpers <jonatan@werpers.com>
parents: 5
diff changeset
259 a_t_u = spdiag(coeff_t_u);
97a638f91fb8 Added function spdiag(). Fixed a bunch of bugs in the Wave2dCurve scheme.
Jonatan Werpers <jonatan@werpers.com>
parents: 5
diff changeset
260 a_n_v = spdiag(coeff_n_v);
97a638f91fb8 Added function spdiag(). Fixed a bunch of bugs in the Wave2dCurve scheme.
Jonatan Werpers <jonatan@werpers.com>
parents: 5
diff changeset
261 a_t_v = spdiag(coeff_t_v);
97a638f91fb8 Added function spdiag(). Fixed a bunch of bugs in the Wave2dCurve scheme.
Jonatan Werpers <jonatan@werpers.com>
parents: 5
diff changeset
262
97a638f91fb8 Added function spdiag(). Fixed a bunch of bugs in the Wave2dCurve scheme.
Jonatan Werpers <jonatan@werpers.com>
parents: 5
diff changeset
263 F_u = (s_u * a_n_u * d_n_u' + s_u * a_t_u*d_t_u')';
97a638f91fb8 Added function spdiag(). Fixed a bunch of bugs in the Wave2dCurve scheme.
Jonatan Werpers <jonatan@werpers.com>
parents: 5
diff changeset
264 F_v = (s_v * a_n_v * d_n_v' + s_v * a_t_v*d_t_v')';
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
265
5
5f6b0b6a012b First try at interface implementation in WaveCurve2s
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
266 u = obj;
5f6b0b6a012b First try at interface implementation in WaveCurve2s
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
267 v = neighbour_scheme;
5f6b0b6a012b First try at interface implementation in WaveCurve2s
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
268
85
643bc513b8b8 Wave2DCurve: Fixed error in tau. Also made random guess at fixing theory from paper.
Jonatan Werpers <jonatan@werpers.com>
parents: 83
diff changeset
269 b1_u = gamm_u*u.lambda(I_u)./u.a11(I_u).^2;
643bc513b8b8 Wave2DCurve: Fixed error in tau. Also made random guess at fixing theory from paper.
Jonatan Werpers <jonatan@werpers.com>
parents: 83
diff changeset
270 b2_u = gamm_u*u.lambda(I_u)./u.a22(I_u).^2;
643bc513b8b8 Wave2DCurve: Fixed error in tau. Also made random guess at fixing theory from paper.
Jonatan Werpers <jonatan@werpers.com>
parents: 83
diff changeset
271 b1_v = gamm_v*v.lambda(I_v)./v.a11(I_v).^2;
643bc513b8b8 Wave2DCurve: Fixed error in tau. Also made random guess at fixing theory from paper.
Jonatan Werpers <jonatan@werpers.com>
parents: 83
diff changeset
272 b2_v = gamm_v*v.lambda(I_v)./v.a22(I_v).^2;
5
5f6b0b6a012b First try at interface implementation in WaveCurve2s
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
273
82
df642750e8f7 Added Dirichelt BC to Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 55
diff changeset
274 tau = -1./(4*b1_u) -1./(4*b1_v) -1./(4*b2_u) -1./(4*b2_v);
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
275 tau = tuning * spdiag(tau);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
276 sig1 = 1/2;
83
08fbc284718f Fixed bugs.
Jonatan Werpers <jonatan@werpers.com>
parents: 82
diff changeset
277 sig2 = -1/2;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
278
96
19d0c9325a3e Wave2dCurve: Removed some comments.
Jonatan Werpers <jonatan@werpers.com>
parents: 89
diff changeset
279 penalty_parameter_1 = halfnorm_inv_u_n*(e_u*tau + sig1*halfnorm_inv_u_t*F_u*e_u'*halfnorm_u_t*e_u);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
280 penalty_parameter_2 = halfnorm_inv_u_n * sig2 * e_u;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
281
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
282
452
56eb7c088bd4 Allow any coefficient in LaplaceCurvilinear
Jonatan Werpers <jonatan@werpers.com>
parents: 450
diff changeset
283 closure = obj.Ji*obj.a * ( penalty_parameter_1*e_u' + penalty_parameter_2*F_u');
56eb7c088bd4 Allow any coefficient in LaplaceCurvilinear
Jonatan Werpers <jonatan@werpers.com>
parents: 450
diff changeset
284 penalty = obj.Ji*obj.a * (-penalty_parameter_1*e_v' + penalty_parameter_2*F_v');
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
285 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
286
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
287 % Ruturns the boundary ops and sign for the boundary specified by the string boundary.
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
288 % The right boundary is considered the positive boundary
85
643bc513b8b8 Wave2DCurve: Fixed error in tau. Also made random guess at fixing theory from paper.
Jonatan Werpers <jonatan@werpers.com>
parents: 83
diff changeset
289 %
643bc513b8b8 Wave2DCurve: Fixed error in tau. Also made random guess at fixing theory from paper.
Jonatan Werpers <jonatan@werpers.com>
parents: 83
diff changeset
290 % I -- the indecies of the boundary points in the grid matrix
384
32df00102268 Fix bug in Characteristic BC for Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 360
diff changeset
291 function [e, d_n, d_t, coeff_n, coeff_t, s, gamm, halfnorm_inv_n, halfnorm_inv_t, halfnorm_t, I, scale_factor] = get_boundary_ops(obj, boundary)
85
643bc513b8b8 Wave2DCurve: Fixed error in tau. Also made random guess at fixing theory from paper.
Jonatan Werpers <jonatan@werpers.com>
parents: 83
diff changeset
292
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
293 % gridMatrix = zeros(obj.m(2),obj.m(1));
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
294 % gridMatrix(:) = 1:numel(gridMatrix);
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
295
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
296 ind = grid.funcToMatrix(obj.grid, 1:prod(obj.m));
85
643bc513b8b8 Wave2DCurve: Fixed error in tau. Also made random guess at fixing theory from paper.
Jonatan Werpers <jonatan@werpers.com>
parents: 83
diff changeset
297
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
298 switch boundary
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
299 case 'w'
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
300 e = obj.e_w;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
301 d_n = obj.du_w;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
302 d_t = obj.dv_w;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
303 s = -1;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
304
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
305 I = ind(1,:);
89
53fe4b64f65e Minor cleaning of Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
306 coeff_n = obj.a11(I);
53fe4b64f65e Minor cleaning of Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
307 coeff_t = obj.a12(I);
384
32df00102268 Fix bug in Characteristic BC for Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 360
diff changeset
308 scale_factor = sqrt(obj.x_v(I).^2 + obj.y_v(I).^2);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
309 case 'e'
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
310 e = obj.e_e;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
311 d_n = obj.du_e;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
312 d_t = obj.dv_e;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
313 s = 1;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
314
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
315 I = ind(end,:);
89
53fe4b64f65e Minor cleaning of Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
316 coeff_n = obj.a11(I);
53fe4b64f65e Minor cleaning of Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
317 coeff_t = obj.a12(I);
384
32df00102268 Fix bug in Characteristic BC for Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 360
diff changeset
318 scale_factor = sqrt(obj.x_v(I).^2 + obj.y_v(I).^2);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
319 case 's'
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
320 e = obj.e_s;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
321 d_n = obj.dv_s;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
322 d_t = obj.du_s;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
323 s = -1;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
324
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
325 I = ind(:,1)';
89
53fe4b64f65e Minor cleaning of Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
326 coeff_n = obj.a22(I);
53fe4b64f65e Minor cleaning of Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
327 coeff_t = obj.a12(I);
384
32df00102268 Fix bug in Characteristic BC for Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 360
diff changeset
328 scale_factor = sqrt(obj.x_u(I).^2 + obj.y_u(I).^2);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
329 case 'n'
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
330 e = obj.e_n;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
331 d_n = obj.dv_n;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
332 d_t = obj.du_n;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
333 s = 1;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
334
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
335 I = ind(:,end)';
89
53fe4b64f65e Minor cleaning of Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
336 coeff_n = obj.a22(I);
53fe4b64f65e Minor cleaning of Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
337 coeff_t = obj.a12(I);
384
32df00102268 Fix bug in Characteristic BC for Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 360
diff changeset
338 scale_factor = sqrt(obj.x_u(I).^2 + obj.y_u(I).^2);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
339 otherwise
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
340 error('No such boundary: boundary = %s',boundary);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
341 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
342
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
343 switch boundary
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
344 case {'w','e'}
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
345 halfnorm_inv_n = obj.Hiu;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
346 halfnorm_inv_t = obj.Hiv;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
347 halfnorm_t = obj.Hv;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
348 gamm = obj.gamm_u;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
349 case {'s','n'}
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
350 halfnorm_inv_n = obj.Hiv;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
351 halfnorm_inv_t = obj.Hiu;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
352 halfnorm_t = obj.Hu;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
353 gamm = obj.gamm_v;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
354 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
355 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
356
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
357 function N = size(obj)
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
358 N = prod(obj.m);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
359 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
360
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
361
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
362 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
363 end