annotate +multiblock/stitchSchemes.m @ 577:e45c9b56d50d feature/grids

Add an Empty grid class The need turned up for the flexural code when we may or may not have a grid for the open water and want to plot that solution. In case there is no open water we need an empty grid to plot the empty gridfunction against to avoid errors.
author Jonatan Werpers <jonatan@werpers.com>
date Thu, 07 Sep 2017 09:16:12 +0200
parents 419ec303e97d
children 437fad4a47e1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
1 % Stitch schemes together given connection matrix and BC vector.
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
2 % schmHand - function_handle to a Scheme constructor
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
3 % order - order of accuracy
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
4 % schmParam - cell array of extra parameters sent to each Scheme stored as cell arrays
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
5 % blocks - block definitions, On whatever form the scheme expects.
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
6 % ms - grid points in each direction for each block. Ex {[10,10], [10, 20]}
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
7 % conn - connection matrix
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
8 % bound - boundary condition vector, array of structs with fields w,e,s,n
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
9 % each field with a parameter array that is sent to schm.boundary_condition
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
10 %
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
11 % Output parameters are cell arrays and cell matrices.
76
5c569cbef49e Added more input parameter handling and fixed some bugs.
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
12 %
5c569cbef49e Added more input parameter handling and fixed some bugs.
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
13 % Ex: [schms, D, H] = stitchSchemes(schmHand, order, schmParam, blocks, ms, conn, bound)
181
419ec303e97d Made some local changes to stichSchemes.
Jonatan Werpers <jonatan@werpers.com>
parents: 120
diff changeset
14 function [schms, D, H] = stitchSchemes(schmHand, order, schmParam, grids, conn, bound)
76
5c569cbef49e Added more input parameter handling and fixed some bugs.
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
15 default_arg('schmParam',[]);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
16
181
419ec303e97d Made some local changes to stichSchemes.
Jonatan Werpers <jonatan@werpers.com>
parents: 120
diff changeset
17 n_blocks = numel(grids);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
18
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
19 % Creating Schemes
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
20 for i = 1:n_blocks
76
5c569cbef49e Added more input parameter handling and fixed some bugs.
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
21 if isempty(schmParam);
181
419ec303e97d Made some local changes to stichSchemes.
Jonatan Werpers <jonatan@werpers.com>
parents: 120
diff changeset
22 schms{i} = schmHand(grids{i},order,[]);
76
5c569cbef49e Added more input parameter handling and fixed some bugs.
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
23 elseif ~iscell(schmParam)
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
24 param = schmParam(i);
181
419ec303e97d Made some local changes to stichSchemes.
Jonatan Werpers <jonatan@werpers.com>
parents: 120
diff changeset
25 schms{i} = schmHand(grids{i},order,param);
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
26 else
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
27 param = schmParam{i};
76
5c569cbef49e Added more input parameter handling and fixed some bugs.
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
28 if iscell(param)
181
419ec303e97d Made some local changes to stichSchemes.
Jonatan Werpers <jonatan@werpers.com>
parents: 120
diff changeset
29 schms{i} = schmHand(grids{i},order,param{:});
76
5c569cbef49e Added more input parameter handling and fixed some bugs.
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
30 else
181
419ec303e97d Made some local changes to stichSchemes.
Jonatan Werpers <jonatan@werpers.com>
parents: 120
diff changeset
31 schms{i} = schmHand(grids{i},order,param);
76
5c569cbef49e Added more input parameter handling and fixed some bugs.
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
32 end
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
33 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
34
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
35 % class(schmParam)
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
36 % class(ms)
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
37 % class(blocks)
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
38 % class(schmParam{i})
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
39 % class(ms)
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
40
76
5c569cbef49e Added more input parameter handling and fixed some bugs.
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
41
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
42 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
43
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
44
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
45 % Total norm
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
46 H = cell(n_blocks,n_blocks);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
47 for i = 1:n_blocks
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
48 H{i,i} = schms{i}.H;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
49 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
50
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
51 %% Total system matrix
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
52
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
53 % Differentiation terms
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
54 D = cell(n_blocks,n_blocks);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
55 for i = 1:n_blocks
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
56 D{i,i} = schms{i}.D;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
57 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
58
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
59 % Boundary penalty terms
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
60 for i = 1:n_blocks
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
61 if ~isstruct(bound{i})
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
62 continue
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
63 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
64
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
65 fn = fieldnames(bound{i});
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
66 for j = 1:length(fn);
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
67 bc = bound{i}.(fn{j});
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
68 if isempty(bc)
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
69 continue
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
70 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
71
120
8eb4e39df8a5 Changed variable name to make it clear boundary penatlies are currently skipped.
Jonatan Werpers <jonatan@werpers.com>
parents: 76
diff changeset
72 [closure, ~] = schms{i}.boundary_condition(fn{j},bc{:});
8eb4e39df8a5 Changed variable name to make it clear boundary penatlies are currently skipped.
Jonatan Werpers <jonatan@werpers.com>
parents: 76
diff changeset
73 D{i,i} = D{i,i}+closure;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
74 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
75 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
76
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
77 % Interface penalty terms
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
78 for i = 1:n_blocks
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
79 for j = 1:n_blocks
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
80 intf = conn{i,j};
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
81 if isempty(intf)
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
82 continue
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
83 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
84
76
5c569cbef49e Added more input parameter handling and fixed some bugs.
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
85 [uu,uv,vv,vu] = schms{i}.interface_coupling(schms{i},intf{1},schms{j},intf{2});
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
86 D{i,i} = D{i,i} + uu;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
87 D{i,j} = uv;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
88 D{j,j} = D{j,j} + vv;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
89 D{j,i} = vu;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
90 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
91 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
92 end