sandbox/easystab/orr_sommerfeld_squire.m
The Orr-Sommerfeld and Squire equation
Here we do just as in poiseuille_uvp.m, except that instead of using the primitive variables formulation (u,v,p), we use the Orr-Sommerfeld and Squire equations, with the variables v and w. We test it on the Poiseuille flow.
clear all; clf
N=200; % number of grid points
alpha=1; % wavenumber in x
beta=0; % wavenumber in z
Re=10000; % Reynolds number
% differentiation matrices
[y,DM] = chebdif(N,4);
d.y=DM(:,:,1);
d.yy=DM(:,:,2);
d.yyyy=DM(:,:,4);
I=eye(N);Z=zeros(N,N);II=blkdiag(I,I);
d.x=i*alpha*I;
d.z=i*beta*I;
% base flow and derivatives
u=1-y.^2;
up=-2*y;
upp=-2;
% laplacian
k2=alpha^2+beta^2;
lap=(d.yy-k2*I);
lap2=(d.yyyy-2*k2*d.yy+k2^2*I);
% system matrices
LOS=-diag(u)*lap*d.x+diag(upp)*d.x+lap2/Re;
LSQ=-diag(u)*d.x+lap/Re;
LC= -diag(up)*d.z;
A=[LOS,Z;LC,LSQ];
E=[lap,I];
Boundary conditions
They are: zero at the walls for v and w (no-slip) and zero derivative at the walls for v (that comes from the no-slip condition on u). The contraint matrix is thus \displaystyle C=\left(\begin{array}{c} I|_{-1}&0\\ I|_{1}&0\\ 0&I|_{-1}\\ 0&I|_{1}\\ \partial_y|_{-1}&0\\ \partial_y|_{1}&0\\ \end{array}\right) such that the boundary conditions are implemented \displaystyle Cq=0 where q is the state vector \displaystyle q=\left(\begin{array}{c} v\\ w \end{array}\right)
% boundary conditions
v=1:N; w=v+N; % location vectors
loc=[v([1,2,N-1,N]),w([1,N])];
C=[II([v([1,N]),w([1,N])],:); ... % Dirichlet on v and w
d.y([1,N],:), Z([1,N],:)]; % Neumann on v
A(loc,:)=C;
E(loc,:)=0;
% computing 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)=[];
% loading the scanned figure for comparison and plotting
a=imread('poiseuille_spectra.png'); ss=size(a);
xx=linspace(0,1,ss(2));
yy=linspace(0,-1,ss(1));
image(xx,yy,a); axis xy
hold on
plot(-imag(s)/alpha,real(s),'ro')
grid on
axis([0,1,-1,0.1]);
xlabel('wave speed'); ylabel('exponential growth rate')
set(gcf,'paperpositionmode','auto');
print('-dpng','-r80','orr_sommerfeld_squire.png');
Exercices/Contributions
- Please write down the equations and how to obtain them in the comments
- Please test it for a case with non-zero \beta (an oblique wave)
- Please test it for the Blasius boundary layer
- Please do a quantitative comparison of the accuracy with the primitive variables formulation poiseuille_uvp.m.