sandbox/easystab/free_surface_gravity-short_wavelength.m
Gravity free surface waves
We show in the general code that the wave velocity at the surface of the sea is:
\displaystyle c=\sqrt(g \tanh(\alpha L)/{\alpha})
clear all; clf;
alphamin=5;
alphamax=10;
for alpha=alphamin:alphamax ; % wavenumber in x
n=100; % number of gridpoints
L=1; % Fluid height in y
rho=1; % fluid density
mu=0.0001; % fuid viscosity
g=1; % gravity
% differentiation matrices
scale=-2/L;
[y,DM] = chebdif(n,2);
D=DM(:,:,1)*scale;
DD=DM(:,:,2)*scale^2;
y=(y-1)/scale;
I=eye(n); Z=zeros(n,n);
% renaming the matrices
dy=D; dyy=DD;
dx=i*alpha*I; dxx=-alpha^2*I;
Delta=dxx+dyy;
% System matrices
A=[mu*Delta, Z, -dx, Z(:,1); ...
Z, mu*Delta, -dy, Z(:,1); ...
dx, dy, Z, Z(:,1); ...
Z(1,:),I(n,:),Z(1,:),0];
E=blkdiag(rho*I,rho*I,Z,1);
% boundary conditions
loc=[1,n,n+1,2*n];
C=[I(1,:),Z(1,:),Z(1,:),0; ...
Z(1,:),I(1,:),Z(1,:),0; ...
Z(1,:),Z(1,:),-I(n,:),rho*g; ...
dy(n,:),dx(n,:),Z(1,:),0];
E(loc,:)=0;
A(loc,:)=C;
% compute eigenmodes
[U,S]=eig(A,E);
s=diag(S); [t,o]=sort(-real(s)); s=s(o); U=U(:,o);
rem=abs(s)>1000; s(rem)=[]; U(:,rem)=[];
Validation for short wavelength
If we have short wavelength compared to the fluid depth, then we have:
\displaystyle tanh(\alpha L)=1
so the wave velocity tends to :
\displaystyle c = \sqrt({g}/{\alpha})
thus the group velocity tends to:
\displaystyle c_g=\sqrt{g \alpha}
This shows that the group velocity of the waves depends on the wavenumber when this one become large: the system is dispersive.
% validation
alphavec=linspace(alphamin,alphamax,100);
ctheo_general=sqrt(g*tanh(alphavec*L)./alphavec);
ctheo_shortwavelength=sqrt(g./alphavec);
cnum=abs(imag(s(1)))/alpha;
cnumvec(alpha+1-alphamin)=cnum;
alphavec2(alpha+1-alphamin)=alpha;
end
subplot(1,2,1)
plot(alphavec,ctheo_shortwavelength,'g-',alphavec2,cnumvec,'b.');
xlabel('alpha');ylabel('wave velocity'); title('validation')
legend('c_{theoretical approched}','c_{num}')
grid on
subplot(1,2,2)
plot(alphavec,(ctheo_shortwavelength-ctheo_general),'r-');
xlabel('alpha');ylabel('différence between general & approached solution'); title('validation')
grid on
set(gcf,'paperpositionmode','auto');
print('-dpng','-r100','free_surface_gravity-short_wave_length.png');
Here are the graphs for the wave velocity as a fonction of the wave number. You can see :
in the first one the graph of the numerical and the approached theoretically approached solution
in the second one, the difference between the exact and the approached solution