Mercurial > repos > public > sbplib
comparison +scheme/LaplaceCurvilinear.m @ 553:63d5c07943dd feature/grids/laplace_refactor
Reorder and restructure constructor
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Tue, 29 Aug 2017 11:04:15 +0200 |
parents | ffaf13533c27 |
children | 6e71d4f8b155 |
comparison
equal
deleted
inserted
replaced
552:ffaf13533c27 | 553:63d5c07943dd |
---|---|
47 function obj = LaplaceCurvilinear(g ,order, a, b, opSet) | 47 function obj = LaplaceCurvilinear(g ,order, a, b, opSet) |
48 default_arg('opSet',@sbp.D2Variable); | 48 default_arg('opSet',@sbp.D2Variable); |
49 default_arg('a', 1); | 49 default_arg('a', 1); |
50 default_arg('b', 1); | 50 default_arg('b', 1); |
51 | 51 |
52 | |
53 if b ~=1 | 52 if b ~=1 |
54 error('Not implemented yet') | 53 error('Not implemented yet') |
55 end | 54 end |
56 | 55 |
57 assert(isa(g, 'grid.Curvilinear')) | 56 assert(isa(g, 'grid.Curvilinear')) |
63 | 62 |
64 h = g.scaling(); | 63 h = g.scaling(); |
65 h_u = h(1); | 64 h_u = h(1); |
66 h_v = h(2); | 65 h_v = h(2); |
67 | 66 |
68 % Operators | 67 |
68 % 1D operators | |
69 ops_u = opSet(m_u, {0, 1}, order); | 69 ops_u = opSet(m_u, {0, 1}, order); |
70 ops_v = opSet(m_v, {0, 1}, order); | 70 ops_v = opSet(m_v, {0, 1}, order); |
71 | 71 |
72 I_u = speye(m_u); | 72 I_u = speye(m_u); |
73 I_v = speye(m_v); | 73 I_v = speye(m_v); |
88 e_l_v = ops_v.e_l; | 88 e_l_v = ops_v.e_l; |
89 e_r_v = ops_v.e_r; | 89 e_r_v = ops_v.e_r; |
90 d1_l_v = ops_v.d1_l; | 90 d1_l_v = ops_v.d1_l; |
91 d1_r_v = ops_v.d1_r; | 91 d1_r_v = ops_v.d1_r; |
92 | 92 |
93 | |
94 % Logical operators | |
93 Du = kr(D1_u,I_v); | 95 Du = kr(D1_u,I_v); |
94 Dv = kr(I_u,D1_v); | 96 Dv = kr(I_u,D1_v); |
95 | 97 obj.Hu = kr(H_u,I_v); |
96 % Metric derivatives | 98 obj.Hv = kr(I_u,H_v); |
99 obj.Hiu = kr(Hi_u,I_v); | |
100 obj.Hiv = kr(I_u,Hi_v); | |
101 | |
102 e_w = kr(e_l_u,I_v); | |
103 e_e = kr(e_r_u,I_v); | |
104 e_s = kr(I_u,e_l_v); | |
105 e_n = kr(I_u,e_r_v); | |
106 obj.du_w = kr(d1_l_u,I_v); | |
107 obj.dv_w = (e_w'*Dv)'; | |
108 obj.du_e = kr(d1_r_u,I_v); | |
109 obj.dv_e = (e_e'*Dv)'; | |
110 obj.du_s = (e_s'*Du)'; | |
111 obj.dv_s = kr(I_u,d1_l_v); | |
112 obj.du_n = (e_n'*Du)'; | |
113 obj.dv_n = kr(I_u,d1_r_v); | |
114 | |
115 | |
116 % Metric coefficients | |
97 coords = g.points(); | 117 coords = g.points(); |
98 x = coords(:,1); | 118 x = coords(:,1); |
99 y = coords(:,2); | 119 y = coords(:,2); |
100 | 120 |
101 x_u = Du*x; | 121 x_u = Du*x; |
107 a11 = 1./J .* (x_v.^2 + y_v.^2); | 127 a11 = 1./J .* (x_v.^2 + y_v.^2); |
108 a12 = -1./J .* (x_u.*x_v + y_u.*y_v); | 128 a12 = -1./J .* (x_u.*x_v + y_u.*y_v); |
109 a22 = 1./J .* (x_u.^2 + y_u.^2); | 129 a22 = 1./J .* (x_u.^2 + y_u.^2); |
110 lambda = 1/2 * (a11 + a22 - sqrt((a11-a22).^2 + 4*a12.^2)); | 130 lambda = 1/2 * (a11 + a22 - sqrt((a11-a22).^2 + 4*a12.^2)); |
111 | 131 |
132 obj.x_u = x_u; | |
133 obj.x_v = x_v; | |
134 obj.y_u = y_u; | |
135 obj.y_v = y_v; | |
136 | |
137 | |
112 % Assemble full operators | 138 % Assemble full operators |
113 L_12 = spdiag(a12); | 139 L_12 = spdiag(a12); |
114 Duv = Du*L_12*Dv; | 140 Duv = Du*L_12*Dv; |
115 Dvu = Dv*L_12*Du; | 141 Dvu = Dv*L_12*Du; |
116 | 142 |
128 D = D2_v(a22(ind(i,:))); | 154 D = D2_v(a22(ind(i,:))); |
129 p = ind(i,:); | 155 p = ind(i,:); |
130 Dvv(p,p) = D; | 156 Dvv(p,p) = D; |
131 end | 157 end |
132 | 158 |
133 obj.H = kr(H_u,H_v); | 159 |
134 obj.Hi = kr(Hi_u,Hi_v); | 160 % Physical operators |
135 obj.Hu = kr(H_u,I_v); | 161 obj.J = spdiag(J); |
136 obj.Hv = kr(I_u,H_v); | 162 obj.Ji = spdiag(1./J); |
137 obj.Hiu = kr(Hi_u,I_v); | 163 |
138 obj.Hiv = kr(I_u,Hi_v); | 164 obj.D = obj.Ji*a*(Duu + Duv + Dvu + Dvv); |
139 | 165 obj.H = obj.J*kr(H_u,H_v); |
140 obj.e_w = kr(e_l_u,I_v); | 166 obj.Hi = obj.Ji*kr(Hi_u,Hi_v); |
141 obj.e_e = kr(e_r_u,I_v); | 167 |
142 obj.e_s = kr(I_u,e_l_v); | 168 obj.e_w = e_w; |
143 obj.e_n = kr(I_u,e_r_v); | 169 obj.e_e = e_e; |
144 obj.du_w = kr(d1_l_u,I_v); | 170 obj.e_s = e_s; |
145 obj.dv_w = (obj.e_w'*Dv)'; | 171 obj.e_n = e_n; |
146 obj.du_e = kr(d1_r_u,I_v); | 172 |
147 obj.dv_e = (obj.e_e'*Dv)'; | 173 obj.Dx = spdiag( y_v./J)*Du + spdiag(-y_u./J)*Dv; |
148 obj.du_s = (obj.e_s'*Du)'; | 174 obj.Dy = spdiag(-x_v./J)*Du + spdiag( x_u./J)*Dv; |
149 obj.dv_s = kr(I_u,d1_l_v); | 175 |
150 obj.du_n = (obj.e_n'*Du)'; | 176 |
151 obj.dv_n = kr(I_u,d1_r_v); | 177 % Misc. |
152 | |
153 obj.x_u = x_u; | |
154 obj.x_v = x_v; | |
155 obj.y_u = y_u; | |
156 obj.y_v = y_v; | |
157 | |
158 obj.m = m; | 178 obj.m = m; |
159 obj.h = [h_u h_v]; | 179 obj.h = [h_u h_v]; |
160 obj.order = order; | 180 obj.order = order; |
161 obj.grid = g; | 181 obj.grid = g; |
162 | 182 |
163 obj.a = a; | 183 obj.a = a; |
164 obj.b = b; | 184 obj.b = b; |
165 obj.J = spdiag(J); | |
166 obj.Ji = spdiag(1./J); | |
167 obj.a11 = a11; | 185 obj.a11 = a11; |
168 obj.a12 = a12; | 186 obj.a12 = a12; |
169 obj.a22 = a22; | 187 obj.a22 = a22; |
170 obj.D = obj.Ji*a*(Duu + Duv + Dvu + Dvv); | |
171 obj.lambda = lambda; | 188 obj.lambda = lambda; |
172 | |
173 obj.Dx = spdiag( y_v./J)*Du + spdiag(-y_u./J)*Dv; | |
174 obj.Dy = spdiag(-x_v./J)*Du + spdiag( x_u./J)*Dv; | |
175 | 189 |
176 obj.gamm_u = h_u*ops_u.borrowing.M.d1; | 190 obj.gamm_u = h_u*ops_u.borrowing.M.d1; |
177 obj.gamm_v = h_v*ops_v.borrowing.M.d1; | 191 obj.gamm_v = h_v*ops_v.borrowing.M.d1; |
178 end | 192 end |
179 | 193 |