Mercurial > repos > public > sbplib
comparison +scheme/Hypsyst2dCurve.m @ 1197:433c89bf19e0 feature/rv
Merge with default
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Wed, 07 Aug 2019 15:23:42 +0200 |
parents | 8d73fcdb07a5 |
children |
comparison
equal
deleted
inserted
replaced
1196:f6c571d8f22f | 1197:433c89bf19e0 |
---|---|
167 params = obj.params; | 167 params = obj.params; |
168 X = obj.X; | 168 X = obj.X; |
169 Y = obj.Y; | 169 Y = obj.Y; |
170 xi = obj.xi; | 170 xi = obj.xi; |
171 eta = obj.eta; | 171 eta = obj.eta; |
172 e_ = obj.getBoundaryOperator('e', boundary); | |
172 | 173 |
173 switch boundary | 174 switch boundary |
174 case {'w','W','west'} | 175 case {'w','W','west'} |
175 e_ = obj.e_w; | |
176 mat = obj.Ahat; | 176 mat = obj.Ahat; |
177 boundPos = 'l'; | 177 boundPos = 'l'; |
178 Hi = obj.Hxii; | 178 Hi = obj.Hxii; |
179 [V,Vi,D,signVec] = obj.matrixDiag(mat,X(obj.index_w),Y(obj.index_w),obj.X_eta(obj.index_w),obj.Y_eta(obj.index_w)); | 179 [V,Vi,D,signVec] = obj.matrixDiag(mat,X(obj.index_w),Y(obj.index_w),obj.X_eta(obj.index_w),obj.Y_eta(obj.index_w)); |
180 side = max(length(eta)); | 180 side = max(length(eta)); |
181 case {'e','E','east'} | 181 case {'e','E','east'} |
182 e_ = obj.e_e; | |
183 mat = obj.Ahat; | 182 mat = obj.Ahat; |
184 boundPos = 'r'; | 183 boundPos = 'r'; |
185 Hi = obj.Hxii; | 184 Hi = obj.Hxii; |
186 [V,Vi,D,signVec] = obj.matrixDiag(mat,X(obj.index_e),Y(obj.index_e),obj.X_eta(obj.index_e),obj.Y_eta(obj.index_e)); | 185 [V,Vi,D,signVec] = obj.matrixDiag(mat,X(obj.index_e),Y(obj.index_e),obj.X_eta(obj.index_e),obj.Y_eta(obj.index_e)); |
187 side = max(length(eta)); | 186 side = max(length(eta)); |
188 case {'s','S','south'} | 187 case {'s','S','south'} |
189 e_ = obj.e_s; | |
190 mat = obj.Bhat; | 188 mat = obj.Bhat; |
191 boundPos = 'l'; | 189 boundPos = 'l'; |
192 Hi = obj.Hetai; | 190 Hi = obj.Hetai; |
193 [V,Vi,D,signVec] = obj.matrixDiag(mat,X(obj.index_s),Y(obj.index_s),obj.X_xi(obj.index_s),obj.Y_xi(obj.index_s)); | 191 [V,Vi,D,signVec] = obj.matrixDiag(mat,X(obj.index_s),Y(obj.index_s),obj.X_xi(obj.index_s),obj.Y_xi(obj.index_s)); |
194 side = max(length(xi)); | 192 side = max(length(xi)); |
195 case {'n','N','north'} | 193 case {'n','N','north'} |
196 e_ = obj.e_n; | |
197 mat = obj.Bhat; | 194 mat = obj.Bhat; |
198 boundPos = 'r'; | 195 boundPos = 'r'; |
199 Hi = obj.Hetai; | 196 Hi = obj.Hetai; |
200 [V,Vi,D,signVec] = obj.matrixDiag(mat,X(obj.index_n),Y(obj.index_n),obj.X_xi(obj.index_n),obj.Y_xi(obj.index_n)); | 197 [V,Vi,D,signVec] = obj.matrixDiag(mat,X(obj.index_n),Y(obj.index_n),obj.X_xi(obj.index_n),obj.Y_xi(obj.index_n)); |
201 side = max(length(xi)); | 198 side = max(length(xi)); |
372 D = diag([DD(poseig); DD(zeroeig); DD(negeig)]); | 369 D = diag([DD(poseig); DD(zeroeig); DD(negeig)]); |
373 V = [V(:,poseig) V(:,zeroeig) V(:,negeig)]; | 370 V = [V(:,poseig) V(:,zeroeig) V(:,negeig)]; |
374 Vi = [Vi(poseig,:); Vi(zeroeig,:); Vi(negeig,:)]; | 371 Vi = [Vi(poseig,:); Vi(zeroeig,:); Vi(negeig,:)]; |
375 signVec = [sum(poseig),sum(zeroeig),sum(negeig)]; | 372 signVec = [sum(poseig),sum(zeroeig),sum(negeig)]; |
376 end | 373 end |
374 | |
375 % Returns the boundary operator op for the boundary specified by the string boundary. | |
376 % op -- string or a cell array of strings | |
377 % boundary -- string | |
378 function varargout = getBoundaryOperator(obj, op, boundary) | |
379 assertIsMember(boundary, {'w', 'e', 's', 'n'}) | |
380 | |
381 if ~iscell(op) | |
382 op = {op}; | |
383 end | |
384 | |
385 for i = 1:numel(op) | |
386 switch op{i} | |
387 case 'e' | |
388 switch boundary | |
389 case 'w' | |
390 e = obj.e_w; | |
391 case 'e' | |
392 e = obj.e_e; | |
393 case 's' | |
394 e = obj.e_s; | |
395 case 'n' | |
396 e = obj.e_n; | |
397 end | |
398 varargout{i} = e; | |
399 end | |
400 end | |
401 end | |
402 | |
403 % Returns square boundary quadrature matrix, of dimension | |
404 % corresponding to the number of boundary points | |
405 % | |
406 % boundary -- string | |
407 function H_b = getBoundaryQuadrature(obj, boundary) | |
408 assertIsMember(boundary, {'w', 'e', 's', 'n'}) | |
409 | |
410 e = obj.getBoundaryOperator('e', boundary); | |
411 | |
412 switch boundary | |
413 case 'w' | |
414 H_b = inv(e'*obj.Hetai*e); | |
415 case 'e' | |
416 H_b = inv(e'*obj.Hetai*e); | |
417 case 's' | |
418 H_b = inv(e'*obj.Hxii*e); | |
419 case 'n' | |
420 H_b = inv(e'*obj.Hxii*e); | |
421 end | |
422 end | |
423 | |
424 | |
377 end | 425 end |
378 end | 426 end |