sandbox/easystab/diffmat_mapping_map2D.m
This code is just like diffmat_mapping.m but here we use the function map2D.m instead of explicitely computing the differentiation matrices for the mapped domain.
clear all; clf
% parameters and flags
Nx=21; % gridpoints in x
Ny=22; % gridpoints in x
Lx=pi; % domain size in x
Ly=pi; % domain size in y
% 1D and 2D differentiation matrices
[d.x,d.xx,d.wx,x]=dif1D('cheb',0,Lx,Nx,3);
[d.y,d.yy,d.wy,y]=dif1D('cheb',0,Ly,Ny,3);
[D,l,X,Y,Z,I,NN]=dif2D(d,x,y);
The mapping
Here we use the function map2D.m to compute the differentiation matrices that account for the mapping. The inputs are the coordinate arrays X and Y once mapped, and the original differentiation matrices in the structure D. The output is the new D that works for the mapped domain.
etay=1+0.1*x;
etax=1-0.1*cos(y);
X=X.*repmat(etax,1,Nx);
Y=Y.*repmat(etay',Ny,1);
D=map2D(X,Y,D);
% test the mapping
f=cos(X).*sin(Y);
fx=-sin(X).*sin(Y); fxx=-cos(X).*sin(Y);
fy=cos(X).*cos(Y); fyy=-cos(X).*sin(Y);
% quantifying the error
ex=norm(fx(:)-D.x*f(:))
ey=norm(fy(:)-D.y*f(:))
exx=norm(fxx(:)-D.xx*f(:))
eyy=norm(fyy(:)-D.yy*f(:))
Size of the approximation error
The last commands give this screen output, approximation error close to machine accuracy.
- ex = 4.2286e-11
- ey = 2.6175e-10
- exx = 8.6893e-10
- eyy = 1.8709e-08
Links
Please see diffmat_mapping.m#links for links to other codes.
Exercices/Contributions
- Please
- Please
- …