# sandbox/easystab/stab2014/rayleigh_benard_marangoni.m

clear all; clf;

# The Rayleigh-Benard-Marangoni convection

This extends the Rayleigh-Benard.m convection. A free surface fluid is heated from below, thus localy changing its density and its surface tension.

This means we have to consider many fluid parameters, listed below. We will study their influence on the stability, depending on the wave numbers considered.

% parameters
N      = 50   ; % number of gridpoints
rho    = 1    ; % fluid density
mu     = 0.001; % fluid viscosity
g      = 1    ; % gravity
sigma0 = 1    ; % initial surface tension
c      = 0.2  ; % surface tension thermal coefficient
d      = 1    ; % thermal dilatation
k      = 0.01 ; % thermal diffusivity
Ty     = -1   ; % vertical gradient of temperature
L      = 0.1  ; % domain height


To run the code you may need Chebychev differentiation matrices, available here

% differentiation matrices
scale=-2/L;
[y,DM] = chebdif(N,2);
D=DM(:,:,1)*scale;
DD=DM(:,:,2)*scale^2;
y=y/scale;
Z=zeros(N,N); I=eye(N);

VAL=[]; % vector used to stock eigenvalues
alphas=[0.001:0.4:20,22:2:70]; % Wavelengths alpha used for calculation

for alpha=alphas % begining the loop on alpha values

% renaming the differentiation matrices
dy=D; dyy=DD;
dx=1i*alpha*I; dxx=-alpha^2*I;
Delta=dxx+dyy;


# System equations

The free surface linearization is explained here

Variables are linearized around initial state : \displaystyle \begin{array}{l} U = u_0+u\\ V=v_0+v\\ T=T_0+y T_y+\theta\\ P=\rho_0 g(L-y)+p \end{array}

Surface tension and density depend on temperature, temperature gradient is supposed small enough to keep thermal coefficients constant :

\displaystyle \begin{array}{l} \rho_{tot} = \rho_0 + \rho (T) \\ \rho(T)=-d \rho_0 \theta \\ \sigma_{tot} = \sigma_0+\sigma(x,T)\\ \sigma(x,T) = -c\sigma_0 \theta \end{array} Incompressibility : \displaystyle u_x+v_y=0 Linearized Navier-stokes around initial state with u_0=v_0=0, with Boussinesq approximation on the y component: \displaystyle \begin{array}{l} \rho_0 u_t = -p_x + \mu \Delta u\\ \rho_0 v_t = -p_y + d \rho_0 g \theta +\mu \Delta v\\ \theta_t+T_y v=k \Delta \theta \end{array}

We can write this system of equations in a matrix form \displaystyle Eq_t=Aq with the matrices \displaystyle q=\left(\begin{array}{c} u \\ v\\ p\\ \theta \\ \eta \\ \sigma \end{array}\right) , \quad A=\left(\begin{array}{cccc} \mu\Delta&0&-\partial_x&0 & 0 & 0 \\ 0&\mu\Delta&-\partial_y&\rho_0 g d & 0 & 0\\ \partial_x&\partial_y&0&0 & 0 & 0\\ 0&-T_y&0&k\Delta &0 & 0\\ 0&I|_L&0&0&0&0\\ 0&0&0& \sigma_0 c I|_L & 0 & 1 \end{array}\right) , \quad E=\left(\begin{array}{cccccc}\rho_0& \\ &\rho_0& \\ & &0& \\ & & &1& \\ & & & &1& \\ & & & & &0\end{array}\right)

% system matrices
A=[mu*Delta, Z, -dx, Z, Z(:,1),Z(:,1);...
Z, mu*Delta, -dy, rho*g*d*I, Z(:,1),Z(:,1);  ...
dx, dy, Z, Z, Z(:,1),Z(:,1);  ...
Z, -Ty*I, Z, k*Delta, Z(:,1),Z(:,1);...
Z(1,:),I(N,:),Z(1,:),Z(1,:),0,0;...
Z(1,:),Z(1,:),Z(1,:),sigma0*c*I(N,:),0,1];
E=blkdiag(rho*I,rho*I,Z,I,1,0);


# Boundary conditions

Non penetration at the bottom : \displaystyle \begin{array}{l} u|_0=0\\ v|_0=0 \end{array} Imposed temperature at the bottom \displaystyle \theta|_0=0 Continuity of heat flux at the interface, assuming the top fluid’s flux is negligible : \displaystyle \theta_y|_L=0

Continuity of stress at interface, in general situation, is expressed with this relation, domain 2 being above domain 1, \mathbf{n} being the normal vector from 2 to 1, and \mathbf{T} the stress tensor : \displaystyle \mathbf{T}_2.\mathbf{n}-\mathbf{T}_1.\mathbf{n} = (\sigma \nabla.\mathbf{n})\mathbf{n}-\nabla \sigma A formal demonstration is given on this page. With \mathbf{T}=-p \mathbf{I}+\mu (\nabla \mathbf{u} + \nabla^t \mathbf{u}) , \mathbf{n}=\left(\begin{array}{l} 0 \\ 1 \end{array}\right) with small perturbations, and expressed in our system, where domain 1 is negligible, this leads to

tangential stress continuity : \displaystyle \mu (u_y+v_x)|_L=\sigma_x normal stress continuity : \displaystyle p|_L=2 \mu v_y|_L + \rho_0 g \eta-\sigma_0 \eta_{xx}

thus the boundary conditions are expressed Cq=0, with the constraint matrix \displaystyle C=\left(\begin{array}{cccccc} I|_0&0&0&0&0&0\\ \mu \partial_y |_L & \mu \partial_x |_L&0&0&0&-i \alpha\\ 0&I|_0&0&0&0&0\\ 0&2 \mu \partial_y |_L&-I|_L&0&\rho_0 g+\sigma_0 \alpha^2&0 \\ 0&0&0&I|_0&0&0\\ 0&0&0&\partial_y |_L&0&0 \end{array}\right)

% boundary conditions

u0=1; uL=N; v0=N+1; vL=2*N ; p0=2*N+1 ; pL=3*N; T0=3*N+1; TL=4*N; eta=4*N+1; %location in vector
loc=[u0,uL,v0,pL,T0,TL];

C=[ I(1,:)     , Z(1,:)       , Z(1,:) , Z(1,:)  , 0                    , 0;...     % u(0)=0
mu*dy(N,:) , mu*dx(N,:)   , Z(1,:) , Z(1,:)  , 0                    ,-1i*alpha; % µ(dv/dx+du/dy)=d(sigma)/dx
Z(1,:)     , I(1,:)       , Z(1,:) , Z(1,:)  , 0                    , 0;...     % v(0)=0
Z(1,:)     , 2*mu*dy(1,:) ,-I(N,:) , Z(1,:)  , rho*g+sigma0*alpha^2 , 0;...     % p(L)=2*mu*dv/dy+rho*g*eta-sigma0*d²(eta)/dx²
Z(1,:)     , Z(1,:)       , Z(1,:) , I(1,:)  , 0                    , 0; ...    % T(0)=0
Z(1,:)     , Z(1,:)       , Z(1,:) , dy(N,:) , 0                    , 0];       % dT(L)/dy=0

A(loc,:)=C;
E(loc,:)=0;


# Results and validation

We compute the eigenmodes of this system and sort them to get the main ones.

To validate the program we use an article of K.A SMITH, published in 1958 in the journal of fluid mechnanics, page 401.

He did an analytic study of this convection, depending on some specific numbers :

Marangoni number N_m=-c \sigma_0 L^2 T_y/{\mu k}

Crispation number N_{cr} = \mu k/{\sigma_0 L}

Group number N_G=\rho_0 L^3 g/\sigma_0

And finally he didn’t consider directly wavenumber \alpha but \alpha L

He summed up his results for low N_G values on this figure. I added red lines to point the values i used : for N_m=200 and N_{cr}=10^{-4} he found that the system was unstable for 0.7<\alpha L<5.

Using the same specific numbers i plot the main eigenvalues, depending on \alpha L. We are above 0 for 0.71<\alpha L<4.95, as Smith was. This validates our model.

% 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)=[];
VAL=[VAL,real(s(1:5))];

end

Nm=-c*sigma0*L^2*Ty/mu/k % Marangoni number
Ncr=mu*k/sigma0/L % Crispation number
Ng=rho*L^3*g/sigma0 % Group number

% Plotting
plot(L*alphas,VAL(1,:),'b',L*alphas,VAL(2,:),'b',L*alphas,VAL(3,:),'b',L*alphas,VAL(4,:),'r',L*alphas,VAL(5,:),'r');
xlabel('L * wavenumber \alpha'); ylabel('exponential growth rate');title(['5 first modes growth rate for N_m = ',num2str(Nm),' and N_{cr} = ',num2str(Ncr)]) ;
grid on;