annotate +grid/Cartesian.m @ 577:e45c9b56d50d feature/grids

Add an Empty grid class The need turned up for the flexural code when we may or may not have a grid for the open water and want to plot that solution. In case there is no open water we need an empty grid to plot the empty gridfunction against to avoid errors.
author Jonatan Werpers <jonatan@werpers.com>
date Thu, 07 Sep 2017 09:16:12 +0200
parents 3da69d57e684
children fcf004066ea9 c3e89f9b2af7
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
154
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
8 end
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
9
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
10 % 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
11 methods
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
12 % 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
13 % in each direction
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
14 function obj = Cartesian(varargin)
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
15 obj.d = length(varargin);
173
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 168
diff changeset
16
154
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
17 for i = 1:obj.d
547
3da69d57e684 Add assertion in inputs to grid.Cartesian
Jonatan Werpers <jonatan@werpers.com>
parents: 191
diff changeset
18 assert(isvector(varargin{i}), 'Coordinate inputs must be a vectors.')
3da69d57e684 Add assertion in inputs to grid.Cartesian
Jonatan Werpers <jonatan@werpers.com>
parents: 191
diff changeset
19
154
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
20 obj.x{i} = varargin{i};
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
21 obj.m(i) = length(varargin{i});
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
22 end
173
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 168
diff changeset
23
154
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
24 obj.n = prod(obj.m);
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
25 if obj.n == 0
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
26 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
27 end
173
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 168
diff changeset
28
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 168
diff changeset
29 obj.h = [];
154
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
30 end
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
31 % 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
32 function o = N(obj)
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
33 o = obj.n;
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
34 end
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
35
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
36 % 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
37 function o = D(obj)
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
38 o = obj.d;
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
39 end
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
40
168
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
41 function m = size(obj)
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
42 m = obj.m;
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
43 end
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
44
154
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
45 % 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
46 % 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
47 function X = points(obj)
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
48 X = zeros(obj.n, obj.d);
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
49
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
50 for i = 1:obj.d
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
51 if iscolumn(obj.x{i})
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
52 c = obj.x{i};
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
53 else
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
54 c = obj.x{i}';
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
55 end
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
56
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
57 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
58 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
59
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
60 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
61 end
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
62 end
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
63
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
64 % 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
65 % 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
66 function X = matrices(obj)
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
67
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
68 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
69 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
70 return
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
71 end
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
72
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
73 X = cell(1,obj.d);
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
74 for i = 1:obj.d
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
75 s = ones(1,obj.d);
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
76 s(i) = obj.m(i);
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
77
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
78 t = reshape(obj.x{i},s);
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
79
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
80 s = obj.m;
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
81 s(i) = 1;
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
82 X{i} = repmat(t,s);
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
83 end
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
84 end
168
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
85
173
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 168
diff changeset
86 function h = scaling(obj)
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 168
diff changeset
87 if isempty(obj.h)
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 168
diff changeset
88 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
89 end
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 168
diff changeset
90
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 168
diff changeset
91 h = obj.h;
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 168
diff changeset
92 end
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 168
diff changeset
93
168
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
94 % 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
95 % 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
96 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
97 m1 = obj.m;
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
98 m2 = g.m;
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
99
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
100 % Check the input
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
101 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
102 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
103 end
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
104
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
105 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
106 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
107 end
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
108
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
109 % 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
110 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
111
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
112 % Create downsampling indecies
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
113 I = {};
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
114 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
115 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
116 end
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 gf = reshapeRowMaj(gf, m1);
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
119 gf = gf(I{:});
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
120 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
121 end
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
122
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
123 % 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
124 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
125 error('grid:Cartesian:NotImplemented')
ba1ae5b2c45e grid.Cartesian: Added methods and test to fulfilll abstract class.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
126 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
127
c5ca9bbfed41 Added methods to hande boundaries to Grid. Added failing tests and method stubs.
Jonatan Werpers <jonatan@werpers.com>
parents: 173
diff changeset
128 % 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
129 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
130 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
131 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
132 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
133 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
134 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
135 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
136 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
137 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
138 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
139 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
140 end
c5ca9bbfed41 Added methods to hande boundaries to Grid. Added failing tests and method stubs.
Jonatan Werpers <jonatan@werpers.com>
parents: 173
diff changeset
141
c5ca9bbfed41 Added methods to hande boundaries to Grid. Added failing tests and method stubs.
Jonatan Werpers <jonatan@werpers.com>
parents: 173
diff changeset
142 % 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
143 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
144 % 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
145 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
146 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
147 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
148 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
149 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
150 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
151 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
152 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
153 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
154 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
155
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 % 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
157 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
158 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
159 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
160 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
161 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
162 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
163 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
164 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
165
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
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
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 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
169 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
170 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
171 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
172 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
173 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
174 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
175 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
176
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 % 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
178 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
179 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
180 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
181
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 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
183
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 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
185 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
186 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
187 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
188 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
189 end
154
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
190 end
c7b2f645101f Added classes and functions for Cartesian and equidistant grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
191 end