Mercurial > repos > public > sbplib
changeset 173:f7bb2a94d291 feature/grids
Added functionallity for storing grid scaling on structured grids.
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Fri, 26 Feb 2016 16:06:03 +0100 |
parents | c3483685116a |
children | 513019e3d855 |
files | +grid/Cartesian.m +grid/CartesianTest.m +grid/Curvilinear.m +grid/CurvilinearTest.m +grid/Structured.m |
diffstat | 5 files changed, 45 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
diff -r c3483685116a -r f7bb2a94d291 +grid/Cartesian.m --- a/+grid/Cartesian.m Thu Feb 25 11:30:05 2016 +0100 +++ b/+grid/Cartesian.m Fri Feb 26 16:06:03 2016 +0100 @@ -4,6 +4,7 @@ d % Number of dimensions m % Number of points in each direction x % Cell array of vectors with node placement for each dimension. + h % Spacing/Scaling end % General d dimensional grid with n points @@ -12,14 +13,18 @@ % in each direction function obj = Cartesian(varargin) obj.d = length(varargin); + for i = 1:obj.d obj.x{i} = varargin{i}; obj.m(i) = length(varargin{i}); end + obj.n = prod(obj.m); if obj.n == 0 error('grid:Cartesian:EmptyGrid','Input parameter gives an empty grid.') end + + obj.h = []; end % n returns the number of points in the grid function o = N(obj) @@ -76,6 +81,14 @@ end end + function h = scaling(obj) + if isempty(obj.h) + error('grid:Cartesian:NoScalingSet', 'No scaling set') + end + + h = obj.h; + end + % Restricts the grid function gf on obj to the subgrid g. % Only works for even multiples function gf = restrictFunc(obj, gf, g)
diff -r c3483685116a -r f7bb2a94d291 +grid/CartesianTest.m --- a/+grid/CartesianTest.m Thu Feb 25 11:30:05 2016 +0100 +++ b/+grid/CartesianTest.m Fri Feb 26 16:06:03 2016 +0100 @@ -184,3 +184,13 @@ end end +function testScaling(testCase) + in = {[1 2 3], [1 2]}; + g = grid.Cartesian(in{:}); + + testCase.verifyError(@()g.scaling(),'grid:Cartesian:NoScalingSet'); + + g.h = [2 1]; + testCase.verifyEqual(g.scaling(),[2 1]); + +end
diff -r c3483685116a -r f7bb2a94d291 +grid/Curvilinear.m --- a/+grid/Curvilinear.m Thu Feb 25 11:30:05 2016 +0100 +++ b/+grid/Curvilinear.m Fri Feb 26 16:06:03 2016 +0100 @@ -29,7 +29,7 @@ if iscell(mapping) obj.coords = cellMappingToCoords(mapping, N, D, obj.logic.m); elseif isnumeric(mapping) - obj.coords = matrixMappingToCoords(mapping, N, D) + obj.coords = matrixMappingToCoords(mapping, N, D); else error('grid:Curvilinear:Curvilinear','mapping must be a matrix or a cell array.'); end @@ -73,13 +73,20 @@ function gf = projectFunc(obj, gf, g) gf = obj.logic.projectFunc(gf,g.baseGrid()); end + + function h = scaling(obj) + if isempty(obj.logic.h) + error('grid:Curvilinear:NoScalingSet','No scaling set'); + end + h = obj.logic.h; + end end end function coords = cellMappingToCoords(mapping, N, D, m) if ~isequal(size(mapping),[1 D]) - error('grid:Curvilinear:Curvilinear','The cell array must be a row array.'); + error('grid:Curvilinear:Curvilinear','The cell array must be a 1xD array.'); end if isequal(size(mapping{1}),[N 1])
diff -r c3483685116a -r f7bb2a94d291 +grid/CurvilinearTest.m --- a/+grid/CurvilinearTest.m Thu Feb 25 11:30:05 2016 +0100 +++ b/+grid/CurvilinearTest.m Fri Feb 26 16:06:03 2016 +0100 @@ -69,3 +69,14 @@ function testMappingInputError(testCase) testCase.assumeFail(); end + +function testScaling(testCase) + in = {{1:2, 1:3}, {[1 2 3 4 5 6]', [7 8 9 10 11 12]'}}; + g = grid.Curvilinear(in{2},in{1}{:}); + + testCase.verifyError(@()g.scaling(),'grid:Curvilinear:NoScalingSet'); + + g.logicalGrid.h = [2 1]; + testCase.verifyEqual(g.scaling(),[2 1]); +end +
diff -r c3483685116a -r f7bb2a94d291 +grid/Structured.m --- a/+grid/Structured.m Thu Feb 25 11:30:05 2016 +0100 +++ b/+grid/Structured.m Fri Feb 26 16:06:03 2016 +0100 @@ -1,6 +1,7 @@ classdef Structured < grid.Grid methods (Abstract) % Returns the size of the grid in each dimension m = [mx my mz ...] - m = size(obj) + m = size(obj); + h = scaling(obj); end end