annotate +grid/Cartesian.m @ 1336:0666629aa183 feature/D2_boundary_opt

Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Fri, 13 May 2022 13:26:16 +0200
parents 031d6db97270
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
159
ce10ebde3123 Added abstract class Structured.
Jonatan Werpers <jonatan@werpers.com>
parents: 155
diff changeset
1 classdef Cartesian < grid.Structured
154
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
2 properties
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
3 n % Number of points in the grid
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
4 d % Number of dimensions
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
5 m % Number of points in each direction
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
6 x % Cell array of vectors with node placement for each dimension.
173
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 168
diff changeset
7 h % Spacing/Scaling
684
fcf004066ea9 Add property lim to grid/Cartesian to make periodic discr easier.
Martin Almquist <malmquist@stanford.edu>
parents: 547
diff changeset
8 lim % Cell array of left and right boundaries for each dimension.
154
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
9 end
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
10
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
11 % General d dimensional grid with n points
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
12 methods
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
13 % Creates a cartesian grid given vectors conatining the coordinates
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
14 % in each direction
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
15 function obj = Cartesian(varargin)
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
16 obj.d = length(varargin);
173
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 168
diff changeset
17
154
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
18 for i = 1:obj.d
747
c3e89f9b2af7 Fix bug that fail tests and correct a typo
Jonatan Werpers <jonatan@werpers.com>
parents: 547
diff changeset
19 assert(isnumeric(varargin{i}), 'Coordinate inputs must be vectors.')
547
3da69d57e684 Add assertion in inputs to grid.Cartesian
Jonatan Werpers <jonatan@werpers.com>
parents: 191
diff changeset
20
154
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
21 obj.x{i} = varargin{i};
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
22 obj.m(i) = length(varargin{i});
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
23 end
173
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 168
diff changeset
24
154
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
25 obj.n = prod(obj.m);
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
26 if obj.n == 0
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
27 error('grid:Cartesian:EmptyGrid','Input parameter gives an empty grid.')
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
28 end
173
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 168
diff changeset
29
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 168
diff changeset
30 obj.h = [];
803
031d6db97270 Add values to .lim in Cartesian
Jonatan Werpers <jonatan@werpers.com>
parents: 797
diff changeset
31
031d6db97270 Add values to .lim in Cartesian
Jonatan Werpers <jonatan@werpers.com>
parents: 797
diff changeset
32 obj.lim = cell(1,obj.d);
031d6db97270 Add values to .lim in Cartesian
Jonatan Werpers <jonatan@werpers.com>
parents: 797
diff changeset
33 for i = 1:obj.d
031d6db97270 Add values to .lim in Cartesian
Jonatan Werpers <jonatan@werpers.com>
parents: 797
diff changeset
34 obj.lim{i} = {obj.x{i}(1), obj.x{i}(end)};
031d6db97270 Add values to .lim in Cartesian
Jonatan Werpers <jonatan@werpers.com>
parents: 797
diff changeset
35 end
154
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
36 end
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
37 % n returns the number of points in the grid
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
38 function o = N(obj)
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
39 o = obj.n;
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
40 end
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
41
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
42 % d returns the spatial dimension of the grid
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
43 function o = D(obj)
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
44 o = obj.d;
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
45 end
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
46
168
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
47 function m = size(obj)
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
48 m = obj.m;
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
49 end
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
50
154
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
51 % points returns a n x d matrix containing the coordianets for all points.
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
52 % points are ordered according to the kronecker product with X*Y*Z
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
53 function X = points(obj)
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
54 X = zeros(obj.n, obj.d);
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
55
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
56 for i = 1:obj.d
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
57 if iscolumn(obj.x{i})
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
58 c = obj.x{i};
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
59 else
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
60 c = obj.x{i}';
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
61 end
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
62
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
63 m_before = prod(obj.m(1:i-1));
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
64 m_after = prod(obj.m(i+1:end));
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
65
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
66 X(:,i) = kr(ones(m_before,1),c,ones(m_after,1));
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
67 end
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
68 end
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
69
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
70 % matrices returns a cell array with coordinates in matrix form.
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
71 % For 2d case these will have to be transposed to work with plotting routines.
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
72 function X = matrices(obj)
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
73
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
74 if obj.d == 1 % There is no 1d matrix data type in matlab, handle special case
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
75 X{1} = reshape(obj.x{1}, [obj.m 1]);
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
76 return
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
77 end
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
78
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
79 X = cell(1,obj.d);
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
80 for i = 1:obj.d
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
81 s = ones(1,obj.d);
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
82 s(i) = obj.m(i);
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
83
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
84 t = reshape(obj.x{i},s);
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
85
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
86 s = obj.m;
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
87 s(i) = 1;
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
88 X{i} = repmat(t,s);
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
89 end
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
90 end
168
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
91
173
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 168
diff changeset
92 function h = scaling(obj)
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 168
diff changeset
93 if isempty(obj.h)
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 168
diff changeset
94 error('grid:Cartesian:NoScalingSet', 'No scaling set')
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 168
diff changeset
95 end
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 168
diff changeset
96
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 168
diff changeset
97 h = obj.h;
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 168
diff changeset
98 end
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 168
diff changeset
99
168
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
100 % Restricts the grid function gf on obj to the subgrid g.
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
101 % Only works for even multiples
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
102 function gf = restrictFunc(obj, gf, g)
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
103 m1 = obj.m;
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
104 m2 = g.m;
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
105
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
106 % Check the input
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
107 if prod(m1) ~= numel(gf)
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
108 error('grid:Cartesian:restrictFunc:NonMatchingFunctionSize', 'The grid function has to few or too many points.');
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
109 end
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
110
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
111 if ~all(mod(m1-1,m2-1) == 0)
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
112 error('grid:Cartesian:restrictFunc:NonMatchingGrids', 'Only integer downsamplings are allowed');
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
113 end
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
114
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
115 % Calculate stride for each dimension
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
116 stride = (m1-1)./(m2-1);
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
117
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
118 % Create downsampling indecies
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
119 I = {};
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
120 for i = 1:length(m1)
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
121 I{i} = 1:stride(i):m1(i);
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
122 end
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
123
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
124 gf = reshapeRowMaj(gf, m1);
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
125 gf = gf(I{:});
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
126 gf = reshapeRowMaj(gf, prod(m2));
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
127 end
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
128
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
129 % Projects the grid function gf on obj to the grid g.
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
130 function gf = projectFunc(obj, gf, g)
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
131 error('grid:Cartesian:NotImplemented')
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
132 end
188
c5ca9bbfed41 Added methods to hande boundaries to Grid. Added failing tests and method stubs.
Jonatan Werpers <jonatan@werpers.com>
parents: 173
diff changeset
133
c5ca9bbfed41 Added methods to hande boundaries to Grid. Added failing tests and method stubs.
Jonatan Werpers <jonatan@werpers.com>
parents: 173
diff changeset
134 % Return the names of all boundaries in this grid.
c5ca9bbfed41 Added methods to hande boundaries to Grid. Added failing tests and method stubs.
Jonatan Werpers <jonatan@werpers.com>
parents: 173
diff changeset
135 function bs = getBoundaryNames(obj)
191
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
136 switch obj.D()
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
137 case 1
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
138 bs = {'l', 'r'};
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
139 case 2
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
140 bs = {'w', 'e', 's', 'n'};
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
141 case 3
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
142 bs = {'w', 'e', 's', 'n', 'd', 'u'};
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
143 otherwise
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
144 error('not implemented');
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
145 end
188
c5ca9bbfed41 Added methods to hande boundaries to Grid. Added failing tests and method stubs.
Jonatan Werpers <jonatan@werpers.com>
parents: 173
diff changeset
146 end
c5ca9bbfed41 Added methods to hande boundaries to Grid. Added failing tests and method stubs.
Jonatan Werpers <jonatan@werpers.com>
parents: 173
diff changeset
147
c5ca9bbfed41 Added methods to hande boundaries to Grid. Added failing tests and method stubs.
Jonatan Werpers <jonatan@werpers.com>
parents: 173
diff changeset
148 % Return coordinates for the given boundary
191
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
149 function X = getBoundary(obj, name)
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
150 % In what dimension is the boundary?
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
151 switch name
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
152 case {'l', 'r', 'w', 'e'}
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
153 D = 1;
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
154 case {'s', 'n'}
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
155 D = 2;
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
156 case {'d', 'u'}
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
157 D = 3;
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
158 otherwise
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
159 error('not implemented');
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
160 end
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
161
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
162 % At what index is the boundary?
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
163 switch name
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
164 case {'l', 'w', 's', 'd'}
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
165 index = 1;
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
166 case {'r', 'e', 'n', 'u'}
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
167 index = obj.m(D);
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
168 otherwise
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
169 error('not implemented');
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
170 end
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
171
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
172
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
173
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
174 I = cell(1, obj.d);
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
175 for i = 1:obj.d
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
176 if i == D
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
177 I{i} = index;
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
178 else
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
179 I{i} = ':';
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
180 end
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
181 end
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
182
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
183 % Calculate size of result:
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
184 m = obj.m;
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
185 m(D) = [];
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
186 N = prod(m);
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
187
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
188 X = zeros(N, obj.d);
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
189
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
190 coordMat = obj.matrices();
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
191 for i = 1:length(coordMat)
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
192 Xtemp = coordMat{i}(I{:});
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
193 X(:,i) = reshapeRowMaj(Xtemp, [N,1]);
7c1d3fc33f90 Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 188
diff changeset
194 end
188
c5ca9bbfed41 Added methods to hande boundaries to Grid. Added failing tests and method stubs.
Jonatan Werpers <jonatan@werpers.com>
parents: 173
diff changeset
195 end
154
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
196 end
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
197 end