Laminar boundary-layer flow past a flat plate

>

Consider a fluid stream with velocity u[0] and kinematic viscosity nu in which a thin plate is inserted parallel with the fluid flow. Determining the velocity of the fluid in the region close to the plate is the Blasius problem [6, p. 233]. Assuming the flow is steady, incompressible, and Newtonian, the plate is infinitely wide, and neglecting buoyancy, the equations of motion and continuity are:

> restart;

> alias( U=u(x,y), V=v(x,y) ):

> PDE:={ U*diff(U,x)+V*diff(U,y)-nu*diff(U,y$2)=0,

> diff(U,x)+diff(V,y)=0 };

PDE := {U*diff(U,x)+V*diff(U,y)-nu*diff(U,`$`(y,2))...

where u and v are the x - and y -components of the fluid velocity. The boundary conditions consist of the ``no-slip'' conditions on the boundary of the plate: u(x,0) = v(x,0) =0, and the free stream-merge condition limit(u(x,y),y = infinity) = u[0] , for all x >0.

>

A similarity transformation can be used to reduce this parabolic system of PDEs to a single ODE. This can be done by choosing the dimensionless similarity variable to be:

> simsubs:=eta(x,y)=y*sqrt(u[0]/nu/x/2);

simsubs := eta(x,y) = 1/2*y*sqrt(2)*sqrt(u[0]/(nu*x...

The corresponding nondimensional stream function for the flow is:

> stream:=psi(x,y)=sqrt(2*nu*x*u[0])*f(eta(x,y));

stream := psi(x,y) = sqrt(2)*sqrt(nu*x*u[0])*f(eta(...

Thus, the velocities can be expressed as:

> Usubs:=U=diff(rhs(stream),y);

Usubs := U = sqrt(2)*sqrt(nu*x*u[0])*D(f)(eta(x,y))...

> Vsubs:=V=-diff(rhs(stream),x);

Vsubs := V = -1/2*sqrt(2)*f(eta(x,y))*nu*u[0]/(sqrt...

Substituting the stream function representations of the velocities into the PDEs is tedious to complete by hand. Fortunately, this is exactly one of Maple's strengths:

> ODE:=simplify(subs(Usubs,Vsubs,simsubs,PDE));

ODE := {-1/2*u[0]^2*(`@@`(D,2)(f)(1/2*y*sqrt(2)*sqr...

The trivial fulfillment of the continuity equation is evident in this result. However, the first equation is not so readily identified. To simplify this further, note that each argument to f , and its derivatives, is simply eta . To force this simplification,

> simsubs2:=solve(subs(eta(x,y)=eta,simsubs),{y});

simsubs2 := {y = eta*sqrt(2)/(sqrt(u[0]/(nu*x)))}

> ODE:=simplify(subs(simsubs2,ODE),symbolic);

ODE := {-1/2*u[0]^2*(`@@`(D,2)(f)(eta)*f(eta)+`@@`(...

It is now easy to identify the Blasius equation

diff(f(eta),`$`(eta,3))+f(eta)*diff(f(eta),`$`(eta,... , eta >0.

The conversion of the boundary conditions can be done by inspection. The resulting conditions are f(0) = f*`'`(0) = 0 and limit(diff(f(eta),eta),eta = infinity) = 1 .

>

The ``boundary condition'' at eta = infinity presents a problem. However, a simple asymptotic analysis shows that solutions at eta =10 are safely in the far-field. The problem now takes the form of a third-order two-point boundary value problem for f on [0,10]. The reformulation as a first-order system is straightforward; let g := f*`'` and h := f*`''` , then

f*`'` = g , f(0) = 0

g*`'` = h , g(0) = 0 (4)

h*`'` = -f*h , h(0) = beta

where beta is the control parameter. The objective is to find beta so that the solution to (4) satisfies the boundary condition g(10) = 1 . Since there is only one boundary condition at eta = 10 we have m[2] = 1 and s = beta . The sensitivity equations that are obtained from (4), together with their accompanying initial values, are:

f[beta]*`'` = g[beta] , f[beta](0) = 0

g[beta]*`'` = h[beta] , g[beta](0) = 0 (5)

h[beta]*`'` = -f[beta]*h-f*h[beta] , h[beta](0) = 1

where, for example, f[beta](t,beta) := diff(f(t,beta),beta) . Now, assume that an approximate solution to (4) and (5) has been computed with s = s^k , i.e. , beta = beta^k . Then, assuming abs(g(10,beta^k)-1) is not sufficiently small, the next iteration will be made with


beta^(k+1) := beta^k-(g(10,beta^k)-1)/g[beta](10,be... .

>

While it is important to understand how shoot obtains its approximations, it is also a tremendous advantage to use Maple to both compute automatically, and symbolically, the sensitivity equations and iteratively solve the combined system of IVPs and take one step of the Newton-Raphson method until the boundary conditions are satisfied within a prescribed tolerance.

>

Prior to preparing this problem for solution by shoot , it is necessary to load the definition of this procedure:

> with(Shoot):

Warning, the protected names norm and trace have been redefined and unprotected

Warning, the assigned name shoot now has a global binding

Now, define the dependent variables for the first-order system:

> FNS:={ f(eta), g(eta), h(eta) }:

and the differential equations which they satisfy:

> ODE:={ diff(f(eta),eta)=g(eta),

> diff(g(eta),eta)=h(eta),

> diff(h(eta),eta)=-f(eta)*h(eta) }:

The initial condition for f*`''` is unknown, and the boundary condition at eta = 10 is the control for our iterations:

> IC:={ f(0)=0, g(0)=0, h(0)=beta }:

> BC:=g(10)=1:

We take the first shot with beta = 0 , and iterate until the boundary condition is satisfied to six decimal places:

> S:=shoot( ODE, IC, BC, FNS, beta=0,

> abserr=Float(5,-7), output=listprocedure, method=taylorseries ):

This solution can be analyzed using any of the standard Maple tools for manipulating the numerical solution of a differential equation. A common place to begin is a plot of the solution, including labels to distinguish the different curves:

> with(plots):

> C:=odeplot( S, [ [eta,f(eta)],

> [eta,g(eta)], [eta,h(eta)] ],0..4):

> subs( [g=`f '`, h=`f ''`],

> subs( [seq( op(0,lhs(F))=rhs(F(3.5)),

> F=subsop(1=NULL,S) )] ) ):

> L:=textplot(

> subs( eta=3.5,

> map(F->[eta,rhs(F)+1/10,lhs(F)],%)),

> font=[TIMES,ITALIC,18], align=ABOVE ):

> display( {C,L}, labels=[`eta`,``],

> title=`Blasius solution for flat-plate `||

> `boundary layer` );

Warning, the name changecoords has been redefined

[Maple Plot]

With increasing distance from the leading edge of the plate in the downstream direction the thickness delta of the retarded boundary layer increases continuously as increasing quantities of fluid become affected. In the boundary layer the velocity of the fluid increases from zero at the wall (no slip) to its full value which corresponds to external frictionless flow. The velocity reaches 99% of its bulk value when f*`'`(eta) = .99 :

> fp0:=subs( S, g(eta) ):

> fp := proc(x)

> if not type(evalf(x),`numeric`) then

> 'procname'(x);

> else

> fp0(x);

> end if;

> end proc:

> eta[`99%`]:=fsolve( fp(eta)=0.99, eta=3..4 );

eta[`99%`] := 3.471886875

Note that the computation of eta[`99%`] has changed significantly for Maple 6. The solution returned by shoot is obtained with method=taylorseries and the function used in fsolve must be written to avoid evaluation in cases when the argument is not numeric. But, in the end, the result is equivalent to the one reported in the original paper.

>

The corresponding boundary layer thickness is:

> delta[`99%`]:=subs(eta=eta[`99%`],

> combine(rhs(op(simsubs2))) );

delta[`99%`] := 3.471886875*sqrt(2)*sqrt(nu*x/u[0])...

As is now evident, the thickness of the boundary layer decreases with decreasing viscosity.

>

The shear stress, tau = mu*diff(u,y) , is:

> tau:=mu*simplify(diff(subs(simsubs,rhs(Usubs)),y));

tau := 1/2*mu*sqrt(nu*x*u[0])*`@@`(D,2)(f)(1/2*y*sq...

Note that a large velocity gradient across the flow creates considerable shear stress in the boundary layer. The wall shear stress is:

> tau[w]:=subs( (D@@2)(f)(0)=subs(S,h(eta))(0), subs( y=0, tau ) );

tau[w] := .2347999942*mu*sqrt(nu*x*u[0])*u[0]*sqrt(...

The analysis can be continued to obtain an understanding of parameters such as the displacement thickness and drag coefficient.

>