Mercurial > repos > public > sbplib
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 |
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 |