Mercurial > repos > public > sbplib
annotate +multiblock/joinGrids.m @ 1199:dfb1b84b63f4 feature/joingrids
Add multiblock.joinGrids, which joins several multiblock grids into one.
author | Martin Almquist <malmquist@stanford.edu> |
---|---|
date | Sat, 17 Aug 2019 16:20:07 -0700 |
parents | |
children |
rev | line source |
---|---|
1199
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
1 % Connects several multiblock grids into one grid |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
2 % gs -- Cell array of multiblock grids |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
3 % gConnections -- Upper-triangular cell matrix |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
4 % gConnections{i,j} specifies all connections between grid i and grid j |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
5 % Example: |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
6 % gConnections{i,j} = { {{1,'e'},{2,'w'}}, {{5,'s'},{2,'n'}},... }; |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
7 % names -- (Optional) cell array of strings, used for boundary groups in new grid |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
8 % default: names = {'g1', 'g2', ..., 'gN'}; |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
9 % Boundary groups from grid i are contained in g.boundaryGroups.(names{i}), etc. |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
10 function g = joinGrids(gs, gConnections, names) |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
11 |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
12 nGrids = numel(gs); |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
13 |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
14 % Default names are {'g1', 'g2', ... 'gN'}. |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
15 defaultNames = cell(nGrids, 1); |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
16 for i = 1:nGrids |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
17 defaultNames{i} = sprintf('g%d',i); |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
18 end |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
19 default_arg('names', defaultNames); |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
20 |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
21 nBlocks = 0; |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
22 for i = 1:nGrids |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
23 nBlocks = nBlocks + gs{i}.nBlocks(); |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
24 end |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
25 |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
26 % Create vector of cumulative sum of number of blocks per grid |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
27 startIndex = zeros(1, nGrids); |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
28 for i = 2:nGrids |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
29 startIndex(i) = startIndex(i-1) + gs{i-1}.nBlocks(); |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
30 end |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
31 |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
32 % Create cell array of all grids |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
33 grids = cell(nBlocks, 1); |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
34 for i = 1:nGrids |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
35 for j = 1:gs{i}.nBlocks(); |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
36 grids{startIndex(i)+j} = gs{i}.grids{j}; |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
37 end |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
38 end |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
39 |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
40 % Create cell matrix of connections |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
41 connections = cell(nBlocks, nBlocks); |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
42 |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
43 % Connections within grids |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
44 for i = 1:nGrids |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
45 for j = 1:gs{i}.nBlocks() |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
46 for k = 1:gs{i}.nBlocks() |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
47 connections{startIndex(i)+j,startIndex(i)+k} = gs{i}.connections{j,k}; |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
48 end |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
49 end |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
50 end |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
51 |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
52 % Connections between grids |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
53 for i = 1:nGrids |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
54 for j = 1:nGrids |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
55 for k = 1:numel(gConnections{i,j}) |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
56 b1 = gConnections{i,j}{k}{1}; |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
57 id1 = b1{1}; |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
58 str1 = b1{2}; |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
59 |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
60 b2 = gConnections{i,j}{k}{2}; |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
61 id2 = b2{1}; |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
62 str2 = b2{2}; |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
63 |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
64 connections{startIndex(i)+id1, startIndex(j)+id2} = {str1, str2}; |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
65 end |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
66 end |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
67 end |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
68 |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
69 % Boundary groups |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
70 boundaryGroups = struct; |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
71 for i = 1:nGrids |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
72 bgs = gs{i}.boundaryGroups; |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
73 bgNames = fieldnames(bgs); |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
74 for j = 1:numel(bgNames) |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
75 bg = bgs.(bgNames{j}); |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
76 |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
77 % Shift block id:s in boundary groups |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
78 for k = 1:length(bg) |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
79 bg{k}{1} = bg{k}{1} + startIndex(i); |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
80 end |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
81 |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
82 bgs.(bgNames{j}) = bg; |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
83 end |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
84 boundaryGroups.(names{i}) = bgs; |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
85 end |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
86 |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
87 % Create grid object |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
88 g = multiblock.Grid(grids, connections, boundaryGroups); |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
89 |
dfb1b84b63f4
Add multiblock.joinGrids, which joins several multiblock grids into one.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
90 end |