annotate +multiblock/joinGrids.m @ 1344:b4e5e45bd239 feature/D2_boundary_opt

Remove round off zeros from D2Nonequidistant operators
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Sat, 15 Oct 2022 15:48:20 +0200
parents dfb1b84b63f4
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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