Mercurial > repos > public > sbplib
annotate +grid/Cartesian.m @ 1031:2ef20d00b386 feature/advectionRV
For easier comparison, return both the first order and residual viscosity when evaluating the residual. Add the first order and residual viscosity to the state of the RungekuttaRV time steppers
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Thu, 17 Jan 2019 10:25:06 +0100 |
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 |