annotate +blockmatrix/getDivision.m @ 1037:2d7ba44340d0 feature/burgers1d

Pass scheme specific parameters as cell array. This will enabale constructDiffOps to be more general. In addition, allow for schemes returning function handles as diffOps, which is currently how non-linear schemes such as Burgers1d are implemented.
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Fri, 18 Jan 2019 09:02:02 +0100
parents a5f1b0267dba
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
205
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
1 function div = getDivision(bm)
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
2 if ~blockmatrix.isBlockmatrix(bm)
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
3 error('blockmatrix:getDivision:NotABlockmatrix', 'Input is not a blockmatrix');
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
4 end
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
5
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
6 if isempty(bm)
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
7 div = {[],[]};
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
8 return
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
9 end
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
10
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
11 div = {row_height(bm),col_width(bm)};
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
12 end
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
13
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
14
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
15 function m = col_width(C)
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
16 m = zeros(1,size(C,2));
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
17 for j = 1:size(C,2)
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
18 for i = 1:size(C,1)
579
a5f1b0267dba Be less strict about what is considered a block matrix
Jonatan Werpers <jonatan@werpers.com>
parents: 205
diff changeset
19 if isNullMatrix(C{i,j})
205
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
20 continue
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
21 end
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
22 m(j) = size(C{i,j},2);
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
23 end
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
24 end
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
25 end
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
26
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
27 function n = row_height(C)
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
28 n = zeros(1,size(C,1));
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
29 for i = 1:size(C,1)
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
30 for j = 1:size(C,2)
579
a5f1b0267dba Be less strict about what is considered a block matrix
Jonatan Werpers <jonatan@werpers.com>
parents: 205
diff changeset
31 if isNullMatrix(C{i,j})
205
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
32 continue
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
33 end
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
34 n(i) = size(C{i,j},1);
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
35 end
f0ef314e2070 blockmatrix: added function to calculate the block division for a given blockmatrix.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
36 end
579
a5f1b0267dba Be less strict about what is considered a block matrix
Jonatan Werpers <jonatan@werpers.com>
parents: 205
diff changeset
37 end
a5f1b0267dba Be less strict about what is considered a block matrix
Jonatan Werpers <jonatan@werpers.com>
parents: 205
diff changeset
38
a5f1b0267dba Be less strict about what is considered a block matrix
Jonatan Werpers <jonatan@werpers.com>
parents: 205
diff changeset
39 function b = isNullMatrix(A)
a5f1b0267dba Be less strict about what is considered a block matrix
Jonatan Werpers <jonatan@werpers.com>
parents: 205
diff changeset
40 [n, m] = size(A);
a5f1b0267dba Be less strict about what is considered a block matrix
Jonatan Werpers <jonatan@werpers.com>
parents: 205
diff changeset
41 b = n == 0 && m == 0;
a5f1b0267dba Be less strict about what is considered a block matrix
Jonatan Werpers <jonatan@werpers.com>
parents: 205
diff changeset
42 end