annotate spdiagsVariablePeriodic.m @ 799:8c65ef13df89 feature/poroelastic

Bort med martins hemska whitespace
author Jonatan Werpers <jonatan@werpers.com>
date Thu, 26 Jul 2018 17:51:48 -0700
parents 50e77b15d841
children 87ea9cac3287
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
681
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
1 function A = spdiagsVariablePeriodic(vals,diags)
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
2 % Creates an m x m periodic discretization matrix.
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
3 % vals - m x ndiags matrix of values
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
4 % diags - 1 x ndiags vector of the 'center diagonals' that vals end up on
799
8c65ef13df89 Bort med martins hemska whitespace
Jonatan Werpers <jonatan@werpers.com>
parents: 683
diff changeset
5 % vals that are not on main diagonal are going to spill over to
681
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
6 % off-diagonal corners.
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
7
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
8 default_arg('diags',0);
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
9
799
8c65ef13df89 Bort med martins hemska whitespace
Jonatan Werpers <jonatan@werpers.com>
parents: 683
diff changeset
10 [m, ~] = size(vals);
681
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
11
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
12 A = sparse(m,m);
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
13
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
14 for i = 1:length(diags)
799
8c65ef13df89 Bort med martins hemska whitespace
Jonatan Werpers <jonatan@werpers.com>
parents: 683
diff changeset
15
681
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
16 d = diags(i);
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
17 a = vals(:,i);
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
18
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
19 % Sub-diagonals
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
20 if d < 0
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
21 a_bulk = a(1+abs(d):end);
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
22 a_corner = a(1:1+abs(d)-1);
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
23 corner_diag = m-abs(d);
799
8c65ef13df89 Bort med martins hemska whitespace
Jonatan Werpers <jonatan@werpers.com>
parents: 683
diff changeset
24 A = A + spdiagVariable(a_bulk, d);
681
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
25 A = A + spdiagVariable(a_corner, corner_diag);
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
26
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
27 % Super-diagonals
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
28 elseif d > 0
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
29 a_bulk = a(1:end-d);
683
50e77b15d841 Bugfix in spdiagsVariablePeriodic
Martin Almquist <malmquist@stanford.edu>
parents: 681
diff changeset
30 a_corner = a(end-d+1:end);
681
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
31 corner_diag = -m + d;
799
8c65ef13df89 Bort med martins hemska whitespace
Jonatan Werpers <jonatan@werpers.com>
parents: 683
diff changeset
32 A = A + spdiagVariable(a_bulk, d);
681
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
33 A = A + spdiagVariable(a_corner, corner_diag);
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
34
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
35 % Main diagonal
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
36 else
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
37 A = A + spdiagVariable(a, 0);
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
38 end
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
39
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
40 end
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
41
7368affc8f78 Add D2 variable periodic for second order.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
42 end