Mercurial > repos > public > sbplib
annotate +grid/Cartesian.m @ 1223:9fddc8749445 rv_diffOp_test
Closing branch
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Mon, 05 Aug 2019 10:48:37 +0200 |
parents | 031d6db97270 |
children |
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 |