annotate +scheme/Wave2dCurve.m @ 577:e45c9b56d50d feature/grids

Add an Empty grid class The need turned up for the flexural code when we may or may not have a grid for the open water and want to plot that solution. In case there is no open water we need an empty grid to plot the empty gridfunction against to avoid errors.
author Jonatan Werpers <jonatan@werpers.com>
date Thu, 07 Sep 2017 09:16:12 +0200
parents 4e266dfe9edc
children 459eeb99130f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
1 classdef Wave2dCurve < scheme.Scheme
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
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
12 c
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
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
39 function obj = Wave2dCurve(g ,order, c, opSet)
303
f18142c1530b Fixed Wave2dCurve for new operators. Some cleanup in d2_variable_4.
Jonatan Werpers <jonatan@werpers.com>
parents: 96
diff changeset
40 default_arg('opSet',@sbp.D2Variable);
27
97a638f91fb8 Added function spdiag(). Fixed a bunch of bugs in the Wave2dCurve scheme.
Jonatan Werpers <jonatan@werpers.com>
parents: 5
diff changeset
41 default_arg('c', 1);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
42
450
8d455e49364f Copy Wave2dCurve to new scheme LaplaceCurvilinear
Jonatan Werpers <jonatan@werpers.com>
parents: 449
diff changeset
43 warning('Use LaplaceCruveilinear instead')
8d455e49364f Copy Wave2dCurve to new scheme LaplaceCurvilinear
Jonatan Werpers <jonatan@werpers.com>
parents: 449
diff changeset
44
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
45 assert(isa(g, 'grid.Curvilinear'))
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
46
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
47 m = g.size();
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
48 m_u = m(1);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
49 m_v = m(2);
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
50 m_tot = g.N();
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 h = g.scaling();
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
53 h_u = h(1);
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
54 h_v = h(2);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
55
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
56 % Operators
303
f18142c1530b Fixed Wave2dCurve for new operators. Some cleanup in d2_variable_4.
Jonatan Werpers <jonatan@werpers.com>
parents: 96
diff changeset
57 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
58 ops_v = opSet(m_v, {0, 1}, order);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
59
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
60 I_u = speye(m_u);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
61 I_v = speye(m_v);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
62
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
63 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
64 D2_u = ops_u.D2;
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
65 H_u = ops_u.H;
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
66 Hi_u = ops_u.HI;
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
67 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
68 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
69 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
70 d1_r_u = ops_u.d1_r;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
71
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
72 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
73 D2_v = ops_v.D2;
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
74 H_v = ops_v.H;
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
75 Hi_v = ops_v.HI;
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
76 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
77 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
78 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
79 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
80
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
81 Du = kr(D1_u,I_v);
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
82 Dv = kr(I_u,D1_v);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
83
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
84 % Metric derivatives
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
85 coords = g.points();
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
86 x = coords(:,1);
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
87 y = coords(:,2);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
88
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
89 x_u = Du*x;
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
90 x_v = Dv*x;
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
91 y_u = Du*y;
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
92 y_v = Dv*y;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
93
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
94 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
95 a11 = 1./J .* (x_v.^2 + y_v.^2);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
96 a12 = -1./J .* (x_u.*x_v + y_u.*y_v);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
97 a22 = 1./J .* (x_u.^2 + y_u.^2);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
98 lambda = 1/2 * (a11 + a22 - sqrt((a11-a22).^2 + 4*a12.^2));
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
99
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
100 % Assemble full operators
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
101 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
102 Duv = Du*L_12*Dv;
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
103 Dvu = Dv*L_12*Du;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
104
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
105 Duu = sparse(m_tot);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
106 Dvv = sparse(m_tot);
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
107 ind = grid.funcToMatrix(g, 1:m_tot);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
108
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
109 for i = 1:m_v
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
110 D = D2_u(a11(ind(:,i)));
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
111 p = ind(:,i);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
112 Duu(p,p) = D;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
113 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
114
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
115 for i = 1:m_u
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
116 D = D2_v(a22(ind(i,:)));
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
117 p = ind(i,:);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
118 Dvv(p,p) = D;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
119 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
120
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
121 obj.H = kr(H_u,H_v);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
122 obj.Hi = kr(Hi_u,Hi_v);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
123 obj.Hu = kr(H_u,I_v);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
124 obj.Hv = kr(I_u,H_v);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
125 obj.Hiu = kr(Hi_u,I_v);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
126 obj.Hiv = kr(I_u,Hi_v);
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.e_w = kr(e_l_u,I_v);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
129 obj.e_e = kr(e_r_u,I_v);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
130 obj.e_s = kr(I_u,e_l_v);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
131 obj.e_n = kr(I_u,e_r_v);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
132 obj.du_w = kr(d1_l_u,I_v);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
133 obj.dv_w = (obj.e_w'*Dv)';
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
134 obj.du_e = kr(d1_r_u,I_v);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
135 obj.dv_e = (obj.e_e'*Dv)';
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
136 obj.du_s = (obj.e_s'*Du)';
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
137 obj.dv_s = kr(I_u,d1_l_v);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
138 obj.du_n = (obj.e_n'*Du)';
370
c2c64ccb6a1e Removed stupid comment
Ylva Rydin <ylva.rydin@telia.com>
parents: 369
diff changeset
139 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
140
384
32df00102268 Fix bug in Characteristic BC for Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 360
diff changeset
141 obj.x_u = x_u;
32df00102268 Fix bug in Characteristic BC for Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 360
diff changeset
142 obj.x_v = x_v;
32df00102268 Fix bug in Characteristic BC for Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 360
diff changeset
143 obj.y_u = y_u;
32df00102268 Fix bug in Characteristic BC for Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 360
diff changeset
144 obj.y_v = y_v;
32df00102268 Fix bug in Characteristic BC for Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 360
diff changeset
145
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
146 obj.m = m;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
147 obj.h = [h_u h_v];
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
148 obj.order = order;
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
149 obj.grid = g;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
150
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
151 obj.c = c;
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
152 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
153 obj.Ji = spdiags(1./J, 0, m_tot, m_tot);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
154 obj.a11 = a11;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
155 obj.a12 = a12;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
156 obj.a22 = a22;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
157 obj.D = obj.Ji*c^2*(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
158 obj.lambda = lambda;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
159
449
0707a7192bc3 Add first derivative operators to Wave2DCurve
Jonatan Werpers <jonatan@werpers.com>
parents: 395
diff changeset
160 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
161 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
162
389
42c89b5eedc0 Add borrowing constants for D2 operators in D4Variable
Jonatan Werpers <jonatan@werpers.com>
parents: 384
diff changeset
163 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
164 obj.gamm_v = h_v*ops_v.borrowing.M.d1;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
165 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
166
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
167
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
168 % 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
169 % 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
170 % 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
171 % 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
172 % 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
173 % neighbour_scheme is an instance of Scheme that should be interfaced to.
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
174 % 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
175 function [closure, penalty] = boundary_condition(obj, boundary, type, parameter)
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
176 default_arg('type','neumann');
347
85c2fe06d551 Implemented characteristic form BC in Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 337
diff changeset
177 default_arg('parameter', []);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
178
384
32df00102268 Fix bug in Characteristic BC for Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 360
diff changeset
179 [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
180 switch type
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
181 % Dirichlet boundary condition
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
182 case {'D','d','dirichlet'}
82
df642750e8f7 Added Dirichelt BC to Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 55
diff changeset
183 % v denotes the solution in the neighbour domain
df642750e8f7 Added Dirichelt BC to Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 55
diff changeset
184 tuning = 1.2;
df642750e8f7 Added Dirichelt BC to Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 55
diff changeset
185 % tuning = 20.2;
df642750e8f7 Added Dirichelt BC to Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 55
diff changeset
186 [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
187
df642750e8f7 Added Dirichelt BC to Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 55
diff changeset
188 a_n = spdiag(coeff_n);
df642750e8f7 Added Dirichelt BC to Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 55
diff changeset
189 a_t = spdiag(coeff_t);
df642750e8f7 Added Dirichelt BC to Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 55
diff changeset
190
df642750e8f7 Added Dirichelt BC to Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 55
diff changeset
191 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
192
df642750e8f7 Added Dirichelt BC to Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 55
diff changeset
193 u = obj;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
194
82
df642750e8f7 Added Dirichelt BC to Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 55
diff changeset
195 b1 = gamm*u.lambda./u.a11.^2;
df642750e8f7 Added Dirichelt BC to Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 55
diff changeset
196 b2 = gamm*u.lambda./u.a22.^2;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
197
82
df642750e8f7 Added Dirichelt BC to Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 55
diff changeset
198 tau = -1./b1 - 1./b2;
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
199 tau = tuning * spdiag(tau);
360
447ceb41fb65 Fixed penalty parameter in Wave2Dcurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 347
diff changeset
200 sig1 = 1;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
201
82
df642750e8f7 Added Dirichelt BC to Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 55
diff changeset
202 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
203
82
df642750e8f7 Added Dirichelt BC to Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 55
diff changeset
204 closure = obj.Ji*obj.c^2 * penalty_parameter_1*e';
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
205 penalty = -obj.Ji*obj.c^2 * penalty_parameter_1;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
206
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
207
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
208 % Neumann boundary condition
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
209 case {'N','n','neumann'}
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
210 c = obj.c;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
211
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
212 a_n = spdiags(coeff_n,0,length(coeff_n),length(coeff_n));
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
213 a_t = spdiags(coeff_t,0,length(coeff_t),length(coeff_t));
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
214 d = (a_n * d_n' + a_t*d_t')';
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
215
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
216 tau1 = -s;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
217 tau2 = 0;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
218 tau = c.^2 * obj.Ji*(tau1*e + tau2*d);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
219
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
220 closure = halfnorm_inv*tau*d';
347
85c2fe06d551 Implemented characteristic form BC in Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 337
diff changeset
221 penalty = -halfnorm_inv*tau;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
222
347
85c2fe06d551 Implemented characteristic form BC in Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 337
diff changeset
223 % Characteristic boundary condition
85c2fe06d551 Implemented characteristic form BC in Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 337
diff changeset
224 case {'characteristic', 'char', 'c'}
85c2fe06d551 Implemented characteristic form BC in Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 337
diff changeset
225 default_arg('parameter', 1);
85c2fe06d551 Implemented characteristic form BC in Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 337
diff changeset
226 beta = parameter;
85c2fe06d551 Implemented characteristic form BC in Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 337
diff changeset
227 c = obj.c;
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 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
230 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
231 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
232
384
32df00102268 Fix bug in Characteristic BC for Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 360
diff changeset
233 tau = -c.^2 * 1/beta*obj.Ji*e;
347
85c2fe06d551 Implemented characteristic form BC in Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 337
diff changeset
234
451
4e266dfe9edc Add warning for possible bug
Jonatan Werpers <jonatan@werpers.com>
parents: 450
diff changeset
235 warning('is this right?! /c?')
384
32df00102268 Fix bug in Characteristic BC for Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 360
diff changeset
236 closure{1} = halfnorm_inv*tau/c*spdiag(scale_factor)*e';
347
85c2fe06d551 Implemented characteristic form BC in Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 337
diff changeset
237 closure{2} = halfnorm_inv*tau*beta*d';
85c2fe06d551 Implemented characteristic form BC in Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 337
diff changeset
238 penalty = -halfnorm_inv*tau;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
239
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
240 % Unknown, boundary condition
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
241 otherwise
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
242 error('No such boundary condition: type = %s',type);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
243 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
244 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
245
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
246 function [closure, penalty] = interface(obj,boundary,neighbour_scheme,neighbour_boundary)
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
247 % u denotes the solution in the own domain
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
248 % 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
249 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
250 % 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
251 [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
252 [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
253
27
97a638f91fb8 Added function spdiag(). Fixed a bunch of bugs in the Wave2dCurve scheme.
Jonatan Werpers <jonatan@werpers.com>
parents: 5
diff changeset
254 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
255 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
256 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
257 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
258
97a638f91fb8 Added function spdiag(). Fixed a bunch of bugs in the Wave2dCurve scheme.
Jonatan Werpers <jonatan@werpers.com>
parents: 5
diff changeset
259 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
260 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
261
5
5f6b0b6a012b First try at interface implementation in WaveCurve2s
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
262 u = obj;
5f6b0b6a012b First try at interface implementation in WaveCurve2s
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
263 v = neighbour_scheme;
5f6b0b6a012b First try at interface implementation in WaveCurve2s
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
264
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
265 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
266 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
267 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
268 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
269
82
df642750e8f7 Added Dirichelt BC to Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 55
diff changeset
270 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
271 tau = tuning * spdiag(tau);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
272 sig1 = 1/2;
83
08fbc284718f Fixed bugs.
Jonatan Werpers <jonatan@werpers.com>
parents: 82
diff changeset
273 sig2 = -1/2;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
274
96
19d0c9325a3e Wave2dCurve: Removed some comments.
Jonatan Werpers <jonatan@werpers.com>
parents: 89
diff changeset
275 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
276 penalty_parameter_2 = halfnorm_inv_u_n * sig2 * e_u;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
277
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
278
5
5f6b0b6a012b First try at interface implementation in WaveCurve2s
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
279 closure = obj.Ji*obj.c^2 * ( penalty_parameter_1*e_u' + penalty_parameter_2*F_u');
83
08fbc284718f Fixed bugs.
Jonatan Werpers <jonatan@werpers.com>
parents: 82
diff changeset
280 penalty = obj.Ji*obj.c^2 * (-penalty_parameter_1*e_v' + penalty_parameter_2*F_v');
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
281 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
282
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
283 % 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
284 % 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
285 %
643bc513b8b8 Wave2DCurve: Fixed error in tau. Also made random guess at fixing theory from paper.
Jonatan Werpers <jonatan@werpers.com>
parents: 83
diff changeset
286 % 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
287 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
288
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
289 % 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
290 % gridMatrix(:) = 1:numel(gridMatrix);
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
291
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
292 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
293
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
294 switch boundary
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
295 case 'w'
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
296 e = obj.e_w;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
297 d_n = obj.du_w;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
298 d_t = obj.dv_w;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
299 s = -1;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
300
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
301 I = ind(1,:);
89
53fe4b64f65e Minor cleaning of Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
302 coeff_n = obj.a11(I);
53fe4b64f65e Minor cleaning of Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
303 coeff_t = obj.a12(I);
384
32df00102268 Fix bug in Characteristic BC for Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 360
diff changeset
304 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
305 case 'e'
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
306 e = obj.e_e;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
307 d_n = obj.du_e;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
308 d_t = obj.dv_e;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
309 s = 1;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
310
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
311 I = ind(end,:);
89
53fe4b64f65e Minor cleaning of Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
312 coeff_n = obj.a11(I);
53fe4b64f65e Minor cleaning of Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
313 coeff_t = obj.a12(I);
384
32df00102268 Fix bug in Characteristic BC for Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 360
diff changeset
314 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
315 case 's'
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
316 e = obj.e_s;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
317 d_n = obj.dv_s;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
318 d_t = obj.du_s;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
319 s = -1;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
320
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
321 I = ind(:,1)';
89
53fe4b64f65e Minor cleaning of Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
322 coeff_n = obj.a22(I);
53fe4b64f65e Minor cleaning of Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
323 coeff_t = obj.a12(I);
384
32df00102268 Fix bug in Characteristic BC for Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 360
diff changeset
324 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
325 case 'n'
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
326 e = obj.e_n;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
327 d_n = obj.dv_n;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
328 d_t = obj.du_n;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
329 s = 1;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
330
337
e070ebd94d9d Updated Wave2dCurve to use the new grid classes.
Jonatan Werpers <jonatan@werpers.com>
parents: 303
diff changeset
331 I = ind(:,end)';
89
53fe4b64f65e Minor cleaning of Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
332 coeff_n = obj.a22(I);
53fe4b64f65e Minor cleaning of Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 85
diff changeset
333 coeff_t = obj.a12(I);
384
32df00102268 Fix bug in Characteristic BC for Wave2dCurve.
Jonatan Werpers <jonatan@werpers.com>
parents: 360
diff changeset
334 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
335 otherwise
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
336 error('No such boundary: boundary = %s',boundary);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
337 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
338
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
339 switch boundary
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
340 case {'w','e'}
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
341 halfnorm_inv_n = obj.Hiu;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
342 halfnorm_inv_t = obj.Hiv;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
343 halfnorm_t = obj.Hv;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
344 gamm = obj.gamm_u;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
345 case {'s','n'}
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
346 halfnorm_inv_n = obj.Hiv;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
347 halfnorm_inv_t = obj.Hiu;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
348 halfnorm_t = obj.Hu;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
349 gamm = obj.gamm_v;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
350 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
351 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
352
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
353 function N = size(obj)
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
354 N = prod(obj.m);
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
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
358 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
359 end