Mercurial > repos > public > sbplib
changeset 801:bbf303c1f0cf feature/poroelastic
Rename spdaigsVariablePeriodic spdiagsPeriodic
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Thu, 26 Jul 2018 18:04:29 -0700 |
parents | 87ea9cac3287 |
children | e3d963997527 |
files | +sbp/+implementations/d2_variable_periodic_2.m +sbp/+implementations/d2_variable_periodic_4.m +sbp/+implementations/d2_variable_periodic_6.m spdiagsPeriodic.m spdiagsVariablePeriodic.m stripeMatrixPeriodic.m |
diffstat | 6 files changed, 68 insertions(+), 68 deletions(-) [+] |
line wrap: on
line diff
diff -r 87ea9cac3287 -r bbf303c1f0cf +sbp/+implementations/d2_variable_periodic_2.m --- a/+sbp/+implementations/d2_variable_periodic_2.m Thu Jul 26 17:53:51 2018 -0700 +++ b/+sbp/+implementations/d2_variable_periodic_2.m Thu Jul 26 18:04:29 2018 -0700 @@ -27,7 +27,7 @@ scheme_width = 3; scheme_radius = (scheme_width-1)/2; - + r = 1:m; offset = scheme_width; r = r + offset; @@ -41,7 +41,7 @@ vals = [Mm1,M0,Mp1]; diags = -scheme_radius : scheme_radius; - M = spdiagsVariablePeriodic(vals,diags); + M = spdiagsPeriodic(vals,diags); M=M/h; D2=HI*(-M );
diff -r 87ea9cac3287 -r bbf303c1f0cf +sbp/+implementations/d2_variable_periodic_4.m --- a/+sbp/+implementations/d2_variable_periodic_4.m Thu Jul 26 17:53:51 2018 -0700 +++ b/+sbp/+implementations/d2_variable_periodic_4.m Thu Jul 26 18:04:29 2018 -0700 @@ -30,7 +30,7 @@ scheme_width = 5; scheme_radius = (scheme_width-1)/2; - + r = 1:m; offset = scheme_width; r = r + offset; @@ -47,7 +47,7 @@ vals = -[Mm2,Mm1,M0,Mp1,Mp2]; diags = -scheme_radius : scheme_radius; - M = spdiagsVariablePeriodic(vals,diags); + M = spdiagsPeriodic(vals,diags); M=M/h; D2=HI*(-M );
diff -r 87ea9cac3287 -r bbf303c1f0cf +sbp/+implementations/d2_variable_periodic_6.m --- a/+sbp/+implementations/d2_variable_periodic_6.m Thu Jul 26 17:53:51 2018 -0700 +++ b/+sbp/+implementations/d2_variable_periodic_6.m Thu Jul 26 18:04:29 2018 -0700 @@ -47,12 +47,12 @@ vals = [Mm3,Mm2,Mm1,M0,Mp1,Mp2,Mp3]; diags = -scheme_radius : scheme_radius; - M = spdiagsVariablePeriodic(vals,diags); + M = spdiagsPeriodic(vals,diags); M=M/h; D2=HI*(-M ); end D2 = @D2_fun; - + end
diff -r 87ea9cac3287 -r bbf303c1f0cf spdiagsPeriodic.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/spdiagsPeriodic.m Thu Jul 26 18:04:29 2018 -0700 @@ -0,0 +1,60 @@ +function A = spdiagsPeriodic(vals,diags) + % Creates an m x m periodic discretization matrix. + % vals - m x ndiags matrix of values + % diags - 1 x ndiags vector of the 'center diagonals' that vals end up on + % vals that are not on main diagonal are going to spill over to + % off-diagonal corners. + + default_arg('diags',0); + + [m, ~] = size(vals); + + A = sparse(m,m); + + for i = 1:length(diags) + + d = diags(i); + a = vals(:,i); + + % Sub-diagonals + if d < 0 + a_bulk = a(1+abs(d):end); + a_corner = a(1:1+abs(d)-1); + corner_diag = m-abs(d); + A = A + spdiagVariable(a_bulk, d); + A = A + spdiagVariable(a_corner, corner_diag); + + % Super-diagonals + elseif d > 0 + a_bulk = a(1:end-d); + a_corner = a(end-d+1:end); + corner_diag = -m + d; + A = A + spdiagVariable(a_bulk, d); + A = A + spdiagVariable(a_corner, corner_diag); + + % Main diagonal + else + A = A + spdiagVariable(a, 0); + end + + end + +end + +function A = spdiagVariable(a,i) + default_arg('i',0); + + if isrow(a) + a = a'; + end + + n = length(a)+abs(i); + + if i > 0 + a = [sparse(i,1); a]; + elseif i < 0 + a = [a; sparse(abs(i),1)]; + end + + A = spdiags(a,i,n,n); +end
diff -r 87ea9cac3287 -r bbf303c1f0cf spdiagsVariablePeriodic.m --- a/spdiagsVariablePeriodic.m Thu Jul 26 17:53:51 2018 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,60 +0,0 @@ -function A = spdiagsVariablePeriodic(vals,diags) - % Creates an m x m periodic discretization matrix. - % vals - m x ndiags matrix of values - % diags - 1 x ndiags vector of the 'center diagonals' that vals end up on - % vals that are not on main diagonal are going to spill over to - % off-diagonal corners. - - default_arg('diags',0); - - [m, ~] = size(vals); - - A = sparse(m,m); - - for i = 1:length(diags) - - d = diags(i); - a = vals(:,i); - - % Sub-diagonals - if d < 0 - a_bulk = a(1+abs(d):end); - a_corner = a(1:1+abs(d)-1); - corner_diag = m-abs(d); - A = A + spdiagVariable(a_bulk, d); - A = A + spdiagVariable(a_corner, corner_diag); - - % Super-diagonals - elseif d > 0 - a_bulk = a(1:end-d); - a_corner = a(end-d+1:end); - corner_diag = -m + d; - A = A + spdiagVariable(a_bulk, d); - A = A + spdiagVariable(a_corner, corner_diag); - - % Main diagonal - else - A = A + spdiagVariable(a, 0); - end - - end - -end - -function A = spdiagVariable(a,i) - default_arg('i',0); - - if isrow(a) - a = a'; - end - - n = length(a)+abs(i); - - if i > 0 - a = [sparse(i,1); a]; - elseif i < 0 - a = [a; sparse(abs(i),1)]; - end - - A = spdiags(a,i,n,n); -end
diff -r 87ea9cac3287 -r bbf303c1f0cf stripeMatrixPeriodic.m --- a/stripeMatrixPeriodic.m Thu Jul 26 17:53:51 2018 -0700 +++ b/stripeMatrixPeriodic.m Thu Jul 26 18:04:29 2018 -0700 @@ -1,8 +1,8 @@ -% Creates a periodic discretization matrix of size n x n +% Creates a periodic discretization matrix of size n x n % with the values of val on the diagonals diag. % A = stripeMatrix(val,diags,n) function A = stripeMatrixPeriodic(val,diags,n) D = ones(n,1)*val; - A = spdiagsVariablePeriodic(D,diags); + A = spdiagsPeriodic(D,diags); end \ No newline at end of file