Mercurial > repos > public > sbplib
annotate +multiblock/Grid.m @ 186:1fc2eeb4f4e6 feature/grids
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Thu, 03 Mar 2016 20:03:06 +0100 |
parents | +grid/Multiblock.m@3587cb106b54 |
children | 6054dcd3c8a9 |
rev | line source |
---|---|
186
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
183
diff
changeset
|
1 classdef Grid < 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 |
186
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
183
diff
changeset
|
13 % connections -- NxN upper triangular cell matrix. connections{i,j} |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
183
diff
changeset
|
14 % specifies the connection between block i and j. If |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
183
diff
changeset
|
15 % it's empty there is no connection otherwise it's a 2 |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
183
diff
changeset
|
16 % -cell-vector with strings naming the boundaries to be |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
183
diff
changeset
|
17 % connected. (inverted coupling?) |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
183
diff
changeset
|
18 function obj = Grid(grids, connections) |
183
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
19 obj.grids = grids; |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
20 obj.connections = connections; |
153
7aee9eba3bb8
Added abstract classes for some different types of grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
21 |
183
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
22 obj.nPoints = 0; |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
23 for i = 1:length(grids) |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
24 obj.nPoints = obj.nPoints + grids{i}.N(); |
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 end |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
27 |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
28 function n = size(obj) |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
29 n = length(obj.grids); |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
30 end |
153
7aee9eba3bb8
Added abstract classes for some different types of grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
31 |
183
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
32 % 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
|
33 function o = N(obj) |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
34 o = obj.nPoints; |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
35 end |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
36 |
186
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
183
diff
changeset
|
37 function n = nBlocks(obj) |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
183
diff
changeset
|
38 n = length(obj.grids); |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
183
diff
changeset
|
39 end |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
183
diff
changeset
|
40 |
183
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
41 % 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
|
42 function o = D(obj) |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
43 o = obj.grids{1}.D(); |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
44 end |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
45 |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
46 % 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
|
47 function X = points(obj) |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
48 X = []; |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
49 for i = 1:length(obj.grids) |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
50 X = [X; obj.grids{i}.points]; |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
51 end |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
52 end |
160
c700b26ad304
Multiblock.m: Made methods lower case. Added a method.
Jonatan Werpers <jonatan@werpers.com>
parents:
155
diff
changeset
|
53 |
c700b26ad304
Multiblock.m: Made methods lower case. Added a method.
Jonatan Werpers <jonatan@werpers.com>
parents:
155
diff
changeset
|
54 % 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
|
55 function gfs = splitFunc(obj, gf) |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
56 nComponents = length(gf)/obj.nPoints; |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
57 nBlocks = length(obj.grids); |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
58 |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
59 % Collect number of points in each block |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
60 N = cell(1,nBlocks); |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
61 for i = 1:nBlocks |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
62 N{i} = obj.grids{i}.N(); |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
63 end |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
64 |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
65 gfs = mat2cell(gf, N, 1); |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
66 end |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
67 |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
68 % 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
|
69 function gf = restrictFunc(obj, gf, g) |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
70 gfs = obj.splitFunc(gf); |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
71 |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
72 for i = 1:length(obj.grids) |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
73 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
|
74 end |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
75 |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
76 gf = cell2mat(gfs); |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
77 end |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
78 |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
79 % 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
|
80 function o = projectFunc(obj, gf, g) |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
81 error('not implemented') |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
82 |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
83 p = g.points(); |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
84 o = zeros(length(p),1); |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
85 for i = 1:length(p) |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
86 I = whatGrid(p(i)); |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
87 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
|
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 |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
91 function I = whatGrid(p) |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
92 % Find what grid a point lies on |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
93 end |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
94 |
3587cb106b54
Made Multiblock a concrete class. Started implementation.
Jonatan Werpers <jonatan@werpers.com>
parents:
160
diff
changeset
|
95 end |
153
7aee9eba3bb8
Added abstract classes for some different types of grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
96 end |
155
cf748f33cd5b
Removed some extra lines, added some notes and comments. Fixed classname.
Jonatan Werpers <jonatan@werpers.com>
parents:
153
diff
changeset
|
97 end |