Mercurial > repos > public > sbplib
view +sbp/+grid/accurateBoundaryOptimizedGrid.m @ 1297:e53b1e25970a feature/boundary_optimized_grids
Change +sbp/+util/ to +sbp/+grid and change function names to camel case
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Tue, 07 Jul 2020 16:08:08 +0200 |
parents | +sbp/+util/accurateBoundaryOptimizedGrid.m@e059a43bb675 |
children | 0ffb5bfa65e4 |
line wrap: on
line source
function [x,h] = accurateBoundaryOptimizedGrid(lim,N,order) assert(iscell(lim) && numel(lim) == 2,'The limits should be cell arrays with 2 elements.'); L = lim{2} - lim{1}; assert(L>0,'Limits must be given in increasing order.'); %%%% Non-equidistant grid points %%%%% xb = boundaryPoints(order); m = length(xb)-1; % Number of non-equidistant points assert(N-2*(m+1)>=0,'Not enough grid points to contain the boundary region. Requires at least %d points.',2*(m+1)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%% Compute h %%%%%%%%%% h = L/(2*xb(end) + N-1-2*m); %%%%%%%%%%%%%%%%%%%%%%%%% %%%% Define grid %%%%%%%% x = h*[xb; linspace(xb(end)+1,L/h-xb(end)-1,N-2*(m+1))'; L/h-flip(xb) ]; x = x + lim{1}; %%%%%%%%%%%%%%%%%%%%%%%%% end function xb = boundaryPoints(order) switch order case 4 x0 = 0.0000000000000e+00; x1 = 6.8764546205559e-01; x2 = 1.8022115125776e+00; xb = [x0 x1 x2]'; case 6 x0 = 0.0000000000000e+00; x1 = 4.4090263368623e-01; x2 = 1.2855984345073e+00; x3 = 2.2638953951239e+00; xb = [x0 x1 x2 x3]'; case 8 x0 = 0.0000000000000e+00; x1 = 3.8118550247622e-01; x2 = 1.1899550868338e+00; x3 = 2.2476300175641e+00; x4 = 3.3192851303204e+00; xb = [x0 x1 x2 x3 x4]'; case 10 x0 = 0.0000000000000e+00; x1 = 3.5902433622052e-01; x2 = 1.1436659188355e+00; x3 = 2.2144895894456e+00; x4 = 3.3682742337736e+00; x5 = 4.4309689056870e+00; xb = [x0 x1 x2 x3 x4 x5]'; case 12 x0 = 0.0000000000000e+00; x1 = 3.6098032343909e-01; x2 = 1.1634317168086e+00; x3 = 2.2975905356987e+00; x4 = 3.6057529790929e+00; x5 = 4.8918275675510e+00; x6 = 6.0000000000000e+00; xb = [x0 x1 x2 x3 x4 x5 x6]'; otherwise error('Invalid operator order %d.',order); end end