annotate +multiblock/+domain/Line.m @ 1243:4e0b88f3def1 feature/dirac_discr

Use rng(1) to set seed in diracDiscrTest because hex-speak crashed.
author Martin Almquist <malmquist@stanford.edu>
date Tue, 19 Nov 2019 17:11:33 -0800
parents 532b58a9e849
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1061
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
1 classdef Line < multiblock.Definition
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
2 properties
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
3
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
4 xlims
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
5 blockNames % Cell array of block labels
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
6 nBlocks
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
7 connections % Cell array specifying connections between blocks
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
8 boundaryGroups % Structure of boundaryGroups
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
9
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
10 end
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
11
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
12
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
13 methods
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
14 % Creates a divided line
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
15 % x is a vector of boundary and interface positions.
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
16 % blockNames: cell array of labels. The id is default.
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
17 function obj = Line(x,blockNames)
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
18 default_arg('blockNames',[]);
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
19
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
20 N = length(x)-1; % number of blocks in the x direction.
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
21
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
22 if ~issorted(x)
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
23 error('The elements of x seem to be in the wrong order');
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
24 end
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
25
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
26 % Dimensions of blocks and number of points
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
27 blockTi = cell(N,1);
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
28 xlims = cell(N,1);
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
29 for i = 1:N
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
30 xlims{i} = {x(i), x(i+1)};
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
31 end
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
32
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
33 % Interface couplings
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
34 conn = cell(N,N);
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
35 for i = 1:N
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
36 conn{i,i+1} = {'r','l'};
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
37 end
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
38
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
39 % Block names (id number as default)
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
40 if isempty(blockNames)
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
41 obj.blockNames = cell(1, N);
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
42 for i = 1:N
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
43 obj.blockNames{i} = sprintf('%d', i);
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
44 end
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
45 else
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
46 assert(length(blockNames) == N);
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
47 obj.blockNames = blockNames;
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
48 end
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
49 nBlocks = N;
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
50
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
51 % Boundary groups
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
52 boundaryGroups = struct();
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
53 L = { {1, 'l'} };
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
54 R = { {N, 'r'} };
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
55 boundaryGroups.L = multiblock.BoundaryGroup(L);
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
56 boundaryGroups.R = multiblock.BoundaryGroup(R);
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
57 boundaryGroups.all = multiblock.BoundaryGroup([L,R]);
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
58
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
59 obj.connections = conn;
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
60 obj.nBlocks = nBlocks;
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
61 obj.boundaryGroups = boundaryGroups;
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
62 obj.xlims = xlims;
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
63
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
64 end
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
65
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
66
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
67 % Returns a multiblock.Grid given some parameters
1078
532b58a9e849 Bugfix in multiblock.domain.Line method getGrid.
Martin Almquist <malmquist@stanford.edu>
parents: 1061
diff changeset
68 % ms: cell array of m values
1061
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
69 % For same m in every block, just input one scalar.
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
70 function g = getGrid(obj, ms, varargin)
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
71
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
72 default_arg('ms',21)
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
73
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
74 % Extend ms if input is a single scalar
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
75 if (numel(ms) == 1) && ~iscell(ms)
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
76 m = ms;
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
77 ms = cell(1,obj.nBlocks);
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
78 for i = 1:obj.nBlocks
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
79 ms{i} = m;
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
80 end
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
81 end
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
82
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
83 grids = cell(1, obj.nBlocks);
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
84 for i = 1:obj.nBlocks
1078
532b58a9e849 Bugfix in multiblock.domain.Line method getGrid.
Martin Almquist <malmquist@stanford.edu>
parents: 1061
diff changeset
85 grids{i} = grid.equidistant(ms{i}, obj.xlims{i});
1061
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
86 end
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
87
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
88 g = multiblock.Grid(grids, obj.connections, obj.boundaryGroups);
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
89 end
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
90
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
91 % Returns a multiblock.Grid given some parameters
1078
532b58a9e849 Bugfix in multiblock.domain.Line method getGrid.
Martin Almquist <malmquist@stanford.edu>
parents: 1061
diff changeset
92 % ms: cell array of m values
1061
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
93 % For same m in every block, just input one scalar.
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
94 function g = getStaggeredGrid(obj, ms, varargin)
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
95
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
96 default_arg('ms',21)
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
97
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
98 % Extend ms if input is a single scalar
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
99 if (numel(ms) == 1) && ~iscell(ms)
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
100 m = ms;
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
101 ms = cell(1,obj.nBlocks);
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
102 for i = 1:obj.nBlocks
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
103 ms{i} = m;
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
104 end
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
105 end
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
106
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
107 grids = cell(1, obj.nBlocks);
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
108 for i = 1:obj.nBlocks
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
109 [g_primal, g_dual] = grid.primalDual1D(ms{i}, obj.xlims{i});
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
110 grids{i} = grid.Staggered1d(g_primal, g_dual);
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
111 end
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
112
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
113 g = multiblock.Grid(grids, obj.connections, obj.boundaryGroups);
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
114 end
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
115
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
116 % label is the type of label used for plotting,
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
117 % default is block name, 'id' show the index for each block.
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
118 function show(obj, label)
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
119 default_arg('label', 'name')
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
120
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
121 m = 10;
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
122 figure
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
123 for i = 1:obj.nBlocks
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
124 x = linspace(obj.xlims{i}{1}, obj.xlims{i}{2}, m);
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
125 y = 0*x + 0.05* ( (-1)^i + 1 ) ;
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
126 plot(x,y,'+');
1078
532b58a9e849 Bugfix in multiblock.domain.Line method getGrid.
Martin Almquist <malmquist@stanford.edu>
parents: 1061
diff changeset
127 hold on
1061
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
128 end
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
129 hold off
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
130
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
131 switch label
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
132 case 'name'
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
133 labels = obj.blockNames;
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
134 case 'id'
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
135 labels = {};
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
136 for i = 1:obj.nBlocks
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
137 labels{i} = num2str(i);
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
138 end
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
139 otherwise
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
140 axis equal
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
141 return
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
142 end
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
143
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
144 legend(labels)
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
145 axis equal
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
146 end
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
147
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
148 % Returns the grid size of each block in a cell array
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
149 % The input parameters are determined by the subclass
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
150 function ms = getGridSizes(obj, varargin)
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
151 end
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
152 end
c7b619cf5e34 Add multiblock domain Line
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
153 end