annotate +grid/generalCurvilinear.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
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1336
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
1 % Creates a curvilinear grid of dimension length(m).
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
2 % over the logical domain xi_lim, eta_lim, using a provided
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
3 % coordinate mapping. The grid point distribution is
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
4 % specified is
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
5 % Examples:
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
6 % g = grid.generalCurvilinear(mapping, [mx, my], xlim, ylim, {'equidist'}, {'boundaryopt', order, 'accurate'})
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
7 function g = generalCurvilinear(mapping, m, varargin)
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
8 n = length(m);
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
9
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
10 % Check that parameters matches dimensions
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
11 matchingParams = false;
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
12 if length(varargin) == 2*n
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
13 matchingParams = iscell([varargin{1:2*n}]);
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
14 end
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
15 assert(matchingParams,'grid:generalCurvilinear:NonMatchingParameters','The number of parameters per dimensions do not match.');
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
16
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
17 X = [];
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
18 h = [];
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
19 inds_periodic = [];
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
20 for i = 1:n
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
21 lim = varargin{i};
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
22 opts = varargin{i+n};
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
23 gridtype = opts{1};
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
24 switch gridtype
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
25 case 'equidist'
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
26 gridgenerator = @()util.get_grid(lim{1},lim{2},m(i));
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
27 case 'boundaryopt'
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
28 order = opts{2};
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
29 stencil_type = opts{3};
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
30 switch stencil_type
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
31 case {'Accurate','accurate','A','acc'}
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
32 gridgenerator = @()sbp.grid.accurateBoundaryOptimizedGrid(lim,m(i),order);
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
33 case {'Minimal','minimal','M','min'}
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
34 gridgenerator = @()sbp.grid.minimalBoundaryOptimizedGrid(lim,m(i),order);
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
35 end
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
36 case 'periodic'
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
37 gridgenerator = @()util.get_periodic_grid(lim{1},lim{2},m(i));
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
38 inds_periodic = [inds_periodic, i];
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
39 otherwise
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
40 error("grid type %s not supported. Must be one of 'equidist', 'boundaryopt', 'periodic'",gridtype);
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
41 end
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
42 try
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
43 [X{i},h(i)] = gridgenerator();
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
44 catch exception % Propagate any errors in the grid generation functions.
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
45 msgText = getReport(exception);
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
46 error('grid:boundaryOptimizedCurvilinear:InvalidParameter',msgText)
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
47 end
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
48 end
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
49 g = grid.Curvilinear(mapping, X{:});
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
50 g.logic.h = h;
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
51 for i = inds_periodic
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
52 g.logic.lim{i}{2} = g.logic.lim{i}{2}+h(i);
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
53 end
0666629aa183 Add methods for creating grids with different grid point distributions for each coordinate direction, and also supports constructing periodic grids
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
54 end