diff +grid/equidistantCurvilinear.m @ 886:8894e9c49e40 feature/timesteppers

Merge with default for latest changes
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Thu, 15 Nov 2018 16:36:21 -0800
parents 9eff7b58c5f7
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/+grid/equidistantCurvilinear.m	Thu Nov 15 16:36:21 2018 -0800
@@ -0,0 +1,35 @@
+% Creates a curvilinear grid of dimension length(m).
+% over the logical domain xi_lim, eta_lim, ...
+% If all limits are ommited they are set to {0,1}.
+% Examples:
+%   g = grid.equidistantCurvilinear(mapping, [m_xi, m_eta])
+%   g = grid.equidistantCurvilinear(mapping, [m_xi, m_eta], xi_lim, eta_lim)
+%   g = grid.equidistantCurvilinear(mapping, [10, 15], {0,1}, {0,1})
+function g = equidistantCurvilinear(mapping, m, varargin)
+    if isempty(varargin)
+        varargin = repmat({{0,1}}, [1 length(m)]);
+    end
+
+    if length(m) ~= length(varargin)
+        error('grid:equidistant:NonMatchingParameters','The number of provided dimensions do not match.')
+    end
+
+    for i = 1:length(m)
+        if ~iscell(varargin{i}) || numel(varargin{i}) ~= 2
+           error('grid:equidistant:InvalidLimits','The limits should be cell arrays with 2 elements.');
+        end
+
+        if varargin{i}{1} > varargin{i}{2}
+            error('grid:equidistant:InvalidLimits','The elements of the limit must be increasing.');
+        end
+    end
+
+    X = {};
+    h = [];
+    for i = 1:length(m)
+        [X{i}, h(i)] = util.get_grid(varargin{i}{:},m(i));
+    end
+
+    g = grid.Curvilinear(mapping, X{:});
+    g.logic.h = h;
+end
\ No newline at end of file