annotate +grid/Multiblock.m @ 183:3587cb106b54 feature/grids

Made Multiblock a concrete class. Started implementation.
author Jonatan Werpers <jonatan@werpers.com>
date Tue, 01 Mar 2016 13:47:46 +0100
parents c700b26ad304
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
155
cf748f33cd5b Removed some extra lines, added some notes and comments. Fixed classname.
Jonatan Werpers <jonatan@werpers.com>
parents: 153
diff changeset
1 classdef Multiblock < grid.Grid
183
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
2 properties
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
3 grids
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
4 connections
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
5
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
6 nPoints
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
7 end
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
8
153
7aee9eba3bb8 Added abstract classes for some different types of grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
9 % General multiblock grid
183
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
10 methods
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
11
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
12 % grids -- cell array of N grids
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
13 % connections -- NxN cell matrix. connections{i,j} specifies the connection
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
14 % between block i and j. If it's empty there is no
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
15 % connection otherwise it's a 2-cell-vector with strings
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
16 % naming the boundaries to be connected. (inverted coupling?)
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
17 function obj = Multiblock(grids, connections)
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
18 obj.grids = grids;
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
19 obj.connections = connections;
153
7aee9eba3bb8 Added abstract classes for some different types of grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
20
183
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
21 obj.nPoints = 0;
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
22 for i = 1:length(grids)
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
23 obj.nPoints = obj.nPoints + grids{i}.N();
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
24 end
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
25 end
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
26
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
27 function n = size(obj)
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
28 n = length(obj.grids);
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
29 end
153
7aee9eba3bb8 Added abstract classes for some different types of grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
30
183
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
31 % n returns the number of points in the grid
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
32 function o = N(obj)
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
33 o = obj.nPoints;
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
34 end
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
35
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
36 % d returns the spatial dimension of the grid
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
37 function o = D(obj)
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
38 o = obj.grids{1}.D();
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
39 end
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
40
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
41 % points returns a n x d matrix containing the coordinates for all points.
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
42 function X = points(obj)
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
43 X = [];
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
44 for i = 1:length(obj.grids)
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
45 X = [X; obj.grids{i}.points];
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
46 end
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
47 end
160
c700b26ad304 Multiblock.m: Made methods lower case. Added a method.
Jonatan Werpers <jonatan@werpers.com>
parents: 155
diff changeset
48
c700b26ad304 Multiblock.m: Made methods lower case. Added a method.
Jonatan Werpers <jonatan@werpers.com>
parents: 155
diff changeset
49 % Split a grid function on obj to a cell array of grid function on each block
183
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
50 function gfs = splitFunc(obj, gf)
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
51 nComponents = length(gf)/obj.nPoints;
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
52 nBlocks = length(obj.grids);
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
53
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
54 % Collect number of points in each block
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
55 N = cell(1,nBlocks);
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
56 for i = 1:nBlocks
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
57 N{i} = obj.grids{i}.N();
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
58 end
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
59
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
60 gfs = mat2cell(gf, N, 1);
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
61 end
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
62
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
63 % Restricts the grid function gf on obj to the subgrid g.
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
64 function gf = restrictFunc(obj, gf, g)
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
65 gfs = obj.splitFunc(gf);
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
66
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
67 for i = 1:length(obj.grids)
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
68 gfs{i} = obj.grids{i}.restrictFunc(gfs{i}, g.grids{i});
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
69 end
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
70
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
71 gf = cell2mat(gfs);
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
72 end
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
73
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
74 % Projects the grid function gf on obj to the grid g.
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
75 function o = projectFunc(obj, gf, g)
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
76 error('not implemented')
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
77
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
78 p = g.points();
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
79 o = zeros(length(p),1);
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
80 for i = 1:length(p)
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
81 I = whatGrid(p(i));
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
82 o(i) = obj.grids{I}.projectFunc(gf, p(i));
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
83 end
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
84
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
85
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
86 function I = whatGrid(p)
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
87 % Find what grid a point lies on
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
88 end
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
89
3587cb106b54 Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents: 160
diff changeset
90 end
153
7aee9eba3bb8 Added abstract classes for some different types of grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
91 end
155
cf748f33cd5b Removed some extra lines, added some notes and comments. Fixed classname.
Jonatan Werpers <jonatan@werpers.com>
parents: 153
diff changeset
92 end