Mercurial > repos > public > sbplib
diff +sbp/+implementations/d2_noneq_variable_10.m @ 1344:b4e5e45bd239 feature/D2_boundary_opt
Remove round off zeros from D2Nonequidistant operators
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Sat, 15 Oct 2022 15:48:20 +0200 |
parents | 8e9df030a0a5 |
children |
line wrap: on
line diff
--- a/+sbp/+implementations/d2_noneq_variable_10.m Fri Oct 14 14:42:32 2022 +0200 +++ b/+sbp/+implementations/d2_noneq_variable_10.m Sat Oct 15 15:48:20 2022 +0200 @@ -249,6 +249,8 @@ % Helper functions for constructing D2(c) % TODO: Consider changing sparse(diag(...)) to spdiags(....) + min_inds = sbp.implementations.d2_sparsity_pattern_inds(m, order, BP, 0, 5); + nonmin_inds = sbp.implementations.d2_sparsity_pattern_inds(m, order, BP, 1, 5); % Minimal 11 point stencil width function D2 = D2_fun_minimal(c) @@ -267,6 +269,11 @@ % Remainder term added to wide second derivative operator R = (1/1587600 / h) * transpose(DD_10) * C1 * DD_10 + (1/317520 / h) * transpose(DD_9) * C2 * DD_9 + (1/60480 / h) * transpose(DD_8) * C3 * DD_8 + (1/10584 / h) * transpose(DD_7) * C4 * DD_7 + (1/1512 / h) * transpose(DD_6) * C5 * DD_6; D2 = D1 * C1 * D1 - H \ R; + + % Remove potential round off zeros + D2_tmp = sparse(m,m); + D2_tmp(min_inds) = D2(min_inds); + D2 = D2_tmp; end % Non-minimal 13 point stencil width @@ -283,6 +290,11 @@ % Remainder term added to wide second derivative operator R = (1/1587600 / h) * transpose(DD_10) * C1 * DD_10 + (1/317520 / h) * transpose(DD_9) * C2 * DD_9 + (1/60480 / h) * transpose(DD_8) * C3 * DD_8 + (1/10584 / h) * transpose(DD_7) * C4 * DD_7; D2 = D1 * C1 * D1 - H \ R; + + % Remove potential round off zeros + D2_tmp = sparse(m,m); + D2_tmp(nonmin_inds) = D2(nonmin_inds); + D2 = D2_tmp; end % Wide stencil