annotate +grid/Curvilinear.m @ 172:c3483685116a feature/grids

Refactored input parsing in Curvilinear.
author Jonatan Werpers <jonatan@werpers.com>
date Thu, 25 Feb 2016 11:30:05 +0100
parents 62b5f3c34bcb
children f7bb2a94d291
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
170
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
1 classdef Curvilinear < grid.Structured & grid.Mapped
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
2 properties
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
3 logic % Grid of Logical domain
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
4 coords % N x D matrix with coordinates of each point in the physical domain
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
5 end
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
6
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
7 methods
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
8 % Creates a curvilinear grid.
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
9 % Ex: grid.Curvilinear(mapping, xi, eta, ...)
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
10 % mapping -- either a matrix or a cell array with physical coordinates.
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
11 % A matrix should be a grid function (N*D x 1 vector) or a N x D
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
12 % A cell array should be a 1 x D cell array with either N x 1 vectors
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
13 % or matrices of the same dimesions as the logical grid.
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
14 % xi, eta, ... -- are the coordinate positions of the cartesian logical grid.
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
15 function obj = Curvilinear(mapping, varargin)
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
16 xi = varargin;
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
17 obj.logic = grid.Cartesian(xi{:});
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
18
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
19 % If mapping is a function evaluate it
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
20 if isa(mapping, 'function_handle')
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
21 mapping = grid.evalOn(obj.logic, mapping);
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
22 end
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
23
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
24 D = obj.logic.D();
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
25 N = obj.logic.N();
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
26
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
27 obj.coords = zeros(N,D);
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
28
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
29 if iscell(mapping)
172
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
30 obj.coords = cellMappingToCoords(mapping, N, D, obj.logic.m);
170
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
31 elseif isnumeric(mapping)
172
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
32 obj.coords = matrixMappingToCoords(mapping, N, D)
170
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
33 else
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
34 error('grid:Curvilinear:Curvilinear','mapping must be a matrix or a cell array.');
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
35 end
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
36 end
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
37
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
38 function m = size(obj)
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
39 m = obj.logic.size();
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
40 end
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
41
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
42 % logicalGrid returns the domain grid of the mapping.
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
43 function g = logicalGrid(obj)
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
44 g = obj.logic;
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
45 end
153
7aee9eba3bb8 Added abstract classes for some different types of grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
46
7aee9eba3bb8 Added abstract classes for some different types of grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
47 % mapping returns the mapped coordinates as a grid.Function
170
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
48 function m = mapping(obj);
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
49 m = obj.coords;
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
50 end
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
51
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
52 % n returns the number of points in the grid
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
53 function o = N(obj)
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
54 o = obj.logic.N();
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
55 end
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
56
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
57 % d returns the spatial dimension of the grid
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
58 function o = D(obj)
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
59 o = obj.logic.D();
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
60 end
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
61
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
62 % points returns a n x d matrix containing the coordinates for all points.
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
63 function X = points(obj)
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
64 X = obj.coords;
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
65 end
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
66
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
67 % Restricts the grid function gf on obj to the subgrid g.
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
68 function gf = restrictFunc(obj, gf, g)
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
69 gf = obj.logic.restrictFunc(gf, g.baseGrid());
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
70 end
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
71
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
72 % Projects the grid function gf on obj to the grid g.
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
73 function gf = projectFunc(obj, gf, g)
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
74 gf = obj.logic.projectFunc(gf,g.baseGrid());
62b5f3c34bcb Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 159
diff changeset
75 end
153
7aee9eba3bb8 Added abstract classes for some different types of grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
76 end
172
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
77 end
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
78
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
79
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
80 function coords = cellMappingToCoords(mapping, N, D, m)
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
81 if ~isequal(size(mapping),[1 D])
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
82 error('grid:Curvilinear:Curvilinear','The cell array must be a row array.');
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
83 end
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
84
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
85 if isequal(size(mapping{1}),[N 1])
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
86 coords = cell2mat(mapping);
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
87 elseif isequal(size(mapping{1}), m)
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
88 for i = 1:length(mapping)
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
89 coords(:,i) = reshapeRowMaj(mapping{i}, [N 1]);
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
90 end
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
91 else
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
92 error('grid:Curvilinear:Curvilinear','The matrix must have size [N 1] or the same dimension as the grid. Actual: %s', toString(m));
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
93 end
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
94 end
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
95
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
96 function coords = matrixMappingToCoords(mapping, N, D)
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
97 if isequal(size(mapping), [N, D])
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
98 coords = mapping;
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
99 elseif isequal(size(mapping), [N*D, 1])
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
100 coords = reshapeRowMaj(mapping,[N D]);
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
101 else
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
102 error('grid:Curvilinear:Curvilinear','A matrix mapping must be of size [N D] or [N*D 1].');
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
103 end
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
104 end