Consider the steady-state linear advection-diffusion equation
$$ L_\varepsilon u = -\varepsilon u'' - u' = 1,\qquad u(0) = u(1) = 0 , $$
where $\varepsilon>0$ is a small parameter. The solution to this equation has a boundary layer near $x=0$.
In Chebfun, we can define the $\varepsilon$-dependent operator like this:
dom = [0,1]; L = @(eps) chebop(@(u) -eps*diff(u,2) - diff(u),dom,'dirichlet');
Another supported and perhaps more memorable syntax for specifying boundary conditions is with the &
operator:
L = @(eps) chebop(@(u) -eps*diff(u,2) - diff(u),dom) & 'dirichlet';
For $\varepsilon=0.1$ we get this picture:
u = L(0.1)\1; LW = 'linewidth'; lw = 1.6; clf, plot(u,'b',LW,lw) grid on, axis([-0.03 1 0 1.03])
Let's add a curve for $\varepsilon = 0.01$:
u = L(0.01)\1; hold on, plot(u,'r',LW,lw)
Here's $\varepsilon = 0.001$:
u = L(0.001)\1; hold on, plot(u,LW,lw,'color',[0 .8 0]) legend('\epsilon=0.1','\epsilon=0.01','\epsilon=0.001') FS = 'fontsize'; title('Boundary layers for three values of \epsilon',FS,12)
It can be shown that the width of the boundary layer for this equation is $O(\varepsilon)$. Suppose we want to measure this in Chebfun. One method would be to find the point where the solution goes through $0.5$. (This definition wouldn't work for larger $\varepsilon$.)
width = @(eps) min(roots(L(eps)\1-.5));
For example, here are the widths for the three curves just plotted:
format long w = [width(.1) width(.01) width(.001)]
w = 0.088880675019131 0.007073961393037 0.000694537220659
Let's add these points to the plot:
MS = 'markersize'; plot(w,[.5 .5 .5],'.k',MS,18)
We can also plot boundary layer width against $\varepsilon$. The dashed red line confirms the linear behavior.
epsvec = [.1 .03 .01 .003 .001 .0003]; for j = 1:length(epsvec) w(j) = width(epsvec(j)); end clf loglog(epsvec,w,'.-k',LW,1.6,MS,16), grid on xlabel('\epsilon',FS,12) ylabel('width of boundary layer',FS,12) hold on, plot(epsvec,epsvec,'--r',LW,2)