annotate +grid/Curvilinear.m @ 188:c5ca9bbfed41 feature/grids

Added methods to hande boundaries to Grid. Added failing tests and method stubs.
author Jonatan Werpers <jonatan@werpers.com>
date Fri, 04 Mar 2016 17:19:18 +0100
parents f7bb2a94d291
children 7c1d3fc33f90
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)
173
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 172
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
173
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 172
diff changeset
76
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 172
diff changeset
77 function h = scaling(obj)
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 172
diff changeset
78 if isempty(obj.logic.h)
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 172
diff changeset
79 error('grid:Curvilinear:NoScalingSet','No scaling set');
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 172
diff changeset
80 end
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 172
diff changeset
81 h = obj.logic.h;
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 172
diff changeset
82 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
83
c5ca9bbfed41 Added methods to hande boundaries to Grid. Added failing tests and method stubs.
Jonatan Werpers <jonatan@werpers.com>
parents: 173
diff changeset
84 % 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
85 function bs = getBoundaryNames(obj)
c5ca9bbfed41 Added methods to hande boundaries to Grid. Added failing tests and method stubs.
Jonatan Werpers <jonatan@werpers.com>
parents: 173
diff changeset
86 bs = [];
c5ca9bbfed41 Added methods to hande boundaries to Grid. Added failing tests and method stubs.
Jonatan Werpers <jonatan@werpers.com>
parents: 173
diff changeset
87 end
c5ca9bbfed41 Added methods to hande boundaries to Grid. Added failing tests and method stubs.
Jonatan Werpers <jonatan@werpers.com>
parents: 173
diff changeset
88
c5ca9bbfed41 Added methods to hande boundaries to Grid. Added failing tests and method stubs.
Jonatan Werpers <jonatan@werpers.com>
parents: 173
diff changeset
89 % Return coordinates for the given boundary
c5ca9bbfed41 Added methods to hande boundaries to Grid. Added failing tests and method stubs.
Jonatan Werpers <jonatan@werpers.com>
parents: 173
diff changeset
90 function b = getBoundary(obj, name)
c5ca9bbfed41 Added methods to hande boundaries to Grid. Added failing tests and method stubs.
Jonatan Werpers <jonatan@werpers.com>
parents: 173
diff changeset
91 b = [];
c5ca9bbfed41 Added methods to hande boundaries to Grid. Added failing tests and method stubs.
Jonatan Werpers <jonatan@werpers.com>
parents: 173
diff changeset
92 end
153
7aee9eba3bb8 Added abstract classes for some different types of grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
93 end
172
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
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
97 function coords = cellMappingToCoords(mapping, N, D, m)
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
98 if ~isequal(size(mapping),[1 D])
173
f7bb2a94d291 Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents: 172
diff changeset
99 error('grid:Curvilinear:Curvilinear','The cell array must be a 1xD array.');
172
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
100 end
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
101
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
102 if isequal(size(mapping{1}),[N 1])
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
103 coords = cell2mat(mapping);
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
104 elseif isequal(size(mapping{1}), m)
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
105 for i = 1:length(mapping)
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
106 coords(:,i) = reshapeRowMaj(mapping{i}, [N 1]);
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
107 end
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
108 else
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
109 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
110 end
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
111 end
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
112
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
113 function coords = matrixMappingToCoords(mapping, N, D)
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
114 if isequal(size(mapping), [N, D])
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
115 coords = mapping;
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
116 elseif isequal(size(mapping), [N*D, 1])
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
117 coords = reshapeRowMaj(mapping,[N D]);
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
118 else
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
119 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
120 end
c3483685116a Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents: 170
diff changeset
121 end