Mercurial > repos > public > sbplib
annotate +grid/Curvilinear.m @ 1336:0666629aa183 feature/D2_boundary_opt
Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Fri, 13 May 2022 13:26:16 +0200 |
parents | 692bf61385c0 |
children |
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, ...) |
276
30321dc180e1
Fixed documentation for Curvilinear and evalOn.
Jonatan Werpers <jonatan@werpers.com>
parents:
191
diff
changeset
|
10 % mapping -- either a function handle, a matrix or a cell array with physical coordinates. |
30321dc180e1
Fixed documentation for Curvilinear and evalOn.
Jonatan Werpers <jonatan@werpers.com>
parents:
191
diff
changeset
|
11 % A function handle should be a vector valued function of the coordinate mapping. |
170
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
12 % 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
|
13 % 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
|
14 % or matrices of the same dimesions as the logical grid. |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
15 % 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
|
16 function obj = Curvilinear(mapping, varargin) |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
17 xi = varargin; |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
18 obj.logic = grid.Cartesian(xi{:}); |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
19 |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
20 % If mapping is a function evaluate it |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
21 if isa(mapping, 'function_handle') |
448 | 22 if nargin(mapping) ~= length(varargin) |
23 error('The dimension of the mapping does not match the dimension of the logical coordinates') | |
24 end | |
170
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
25 mapping = grid.evalOn(obj.logic, mapping); |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
26 end |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
27 |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
28 D = obj.logic.D(); |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
29 N = obj.logic.N(); |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
30 |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
31 obj.coords = zeros(N,D); |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
32 |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
33 if iscell(mapping) |
172
c3483685116a
Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
170
diff
changeset
|
34 obj.coords = cellMappingToCoords(mapping, N, D, obj.logic.m); |
170
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
35 elseif isnumeric(mapping) |
173
f7bb2a94d291
Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
172
diff
changeset
|
36 obj.coords = matrixMappingToCoords(mapping, N, D); |
170
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
37 else |
381
d32c749408cb
Better error message.
Jonatan Werpers <jonatan@werpers.com>
parents:
276
diff
changeset
|
38 error('grid:Curvilinear:Curvilinear','mapping must be a function handle, a matrix or a cell array.'); |
170
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
39 end |
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 function m = size(obj) |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
43 m = obj.logic.size(); |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
44 end |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
45 |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
46 % logicalGrid returns the domain grid of the mapping. |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
47 function g = logicalGrid(obj) |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
48 g = obj.logic; |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
49 end |
153
7aee9eba3bb8
Added abstract classes for some different types of grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
50 |
7aee9eba3bb8
Added abstract classes for some different types of grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
51 % mapping returns the mapped coordinates as a grid.Function |
170
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
52 function m = mapping(obj); |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
53 m = obj.coords; |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
54 end |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
55 |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
56 % n returns the number of points in the grid |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
57 function o = N(obj) |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
58 o = obj.logic.N(); |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
59 end |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
60 |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
61 % d returns the spatial dimension of the grid |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
62 function o = D(obj) |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
63 o = obj.logic.D(); |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
64 end |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
65 |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
66 % 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
|
67 function X = points(obj) |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
68 X = obj.coords; |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
69 end |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
70 |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
71 % 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
|
72 function gf = restrictFunc(obj, gf, g) |
386
4f935415700e
Fixed bug in curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
381
diff
changeset
|
73 gf = obj.logic.restrictFunc(gf, g.logic); |
170
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
74 end |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
75 |
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
76 % 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
|
77 function gf = projectFunc(obj, gf, g) |
386
4f935415700e
Fixed bug in curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
381
diff
changeset
|
78 gf = obj.logic.projectFunc(gf,g.logic); |
170
62b5f3c34bcb
Implemented Curvilinear and equdistantCurvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
159
diff
changeset
|
79 end |
173
f7bb2a94d291
Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
172
diff
changeset
|
80 |
f7bb2a94d291
Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
172
diff
changeset
|
81 function h = scaling(obj) |
f7bb2a94d291
Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
172
diff
changeset
|
82 if isempty(obj.logic.h) |
f7bb2a94d291
Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
172
diff
changeset
|
83 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
|
84 end |
f7bb2a94d291
Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
172
diff
changeset
|
85 h = obj.logic.h; |
f7bb2a94d291
Added functionallity for storing grid scaling on structured grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
172
diff
changeset
|
86 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
|
87 |
c5ca9bbfed41
Added methods to hande boundaries to Grid. Added failing tests and method stubs.
Jonatan Werpers <jonatan@werpers.com>
parents:
173
diff
changeset
|
88 % 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
|
89 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
|
90 bs = obj.logic.getBoundaryNames(); |
188
c5ca9bbfed41
Added methods to hande boundaries to Grid. Added failing tests and method stubs.
Jonatan Werpers <jonatan@werpers.com>
parents:
173
diff
changeset
|
91 end |
c5ca9bbfed41
Added methods to hande boundaries to Grid. Added failing tests and method stubs.
Jonatan Werpers <jonatan@werpers.com>
parents:
173
diff
changeset
|
92 |
c5ca9bbfed41
Added methods to hande boundaries to Grid. Added failing tests and method stubs.
Jonatan Werpers <jonatan@werpers.com>
parents:
173
diff
changeset
|
93 % 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
|
94 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
|
95 % 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
|
96 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
|
97 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
|
98 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
|
99 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
|
100 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
|
101 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
|
102 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
|
103 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
|
104 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
|
105 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
|
106 |
7c1d3fc33f90
Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
188
diff
changeset
|
107 % 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
|
108 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
|
109 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
|
110 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
|
111 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
|
112 index = obj.logic.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
|
113 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
|
114 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
|
115 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
|
116 |
7c1d3fc33f90
Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
188
diff
changeset
|
117 |
7c1d3fc33f90
Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
188
diff
changeset
|
118 |
7c1d3fc33f90
Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
188
diff
changeset
|
119 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
|
120 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
|
121 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
|
122 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
|
123 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
|
124 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
|
125 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
|
126 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
|
127 |
7c1d3fc33f90
Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
188
diff
changeset
|
128 % 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
|
129 m = obj.logic.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
|
130 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
|
131 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
|
132 |
7c1d3fc33f90
Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
188
diff
changeset
|
133 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
|
134 |
7c1d3fc33f90
Added methods for returning boundary names and boundary coordinates from Cartesian and Curvilinear grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
188
diff
changeset
|
135 p = obj.points; |
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 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
|
137 coordMat{i} = reshapeRowMaj(p(:,i), obj.logic.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
|
138 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
|
139 |
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 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
|
141 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
|
142 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
|
143 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
|
144 end |
153
7aee9eba3bb8
Added abstract classes for some different types of grids.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
145 end |
172
c3483685116a
Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
170
diff
changeset
|
146 end |
c3483685116a
Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
170
diff
changeset
|
147 |
c3483685116a
Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
170
diff
changeset
|
148 |
c3483685116a
Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
170
diff
changeset
|
149 function coords = cellMappingToCoords(mapping, N, D, m) |
c3483685116a
Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
170
diff
changeset
|
150 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
|
151 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
|
152 end |
c3483685116a
Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
170
diff
changeset
|
153 |
c3483685116a
Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
170
diff
changeset
|
154 if isequal(size(mapping{1}),[N 1]) |
c3483685116a
Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
170
diff
changeset
|
155 coords = cell2mat(mapping); |
c3483685116a
Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
170
diff
changeset
|
156 elseif isequal(size(mapping{1}), m) |
c3483685116a
Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
170
diff
changeset
|
157 for i = 1:length(mapping) |
c3483685116a
Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
170
diff
changeset
|
158 coords(:,i) = reshapeRowMaj(mapping{i}, [N 1]); |
c3483685116a
Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
170
diff
changeset
|
159 end |
c3483685116a
Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
170
diff
changeset
|
160 else |
c3483685116a
Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
170
diff
changeset
|
161 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
|
162 end |
c3483685116a
Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
170
diff
changeset
|
163 end |
c3483685116a
Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
170
diff
changeset
|
164 |
c3483685116a
Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
170
diff
changeset
|
165 function coords = matrixMappingToCoords(mapping, N, D) |
c3483685116a
Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
170
diff
changeset
|
166 if isequal(size(mapping), [N, D]) |
c3483685116a
Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
170
diff
changeset
|
167 coords = mapping; |
c3483685116a
Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
170
diff
changeset
|
168 elseif isequal(size(mapping), [N*D, 1]) |
c3483685116a
Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
170
diff
changeset
|
169 coords = reshapeRowMaj(mapping,[N D]); |
c3483685116a
Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
170
diff
changeset
|
170 else |
c3483685116a
Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
170
diff
changeset
|
171 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
|
172 end |
c3483685116a
Refactored input parsing in Curvilinear.
Jonatan Werpers <jonatan@werpers.com>
parents:
170
diff
changeset
|
173 end |