Research Article Volume 2 Issue 3
Director of Fidelity Investments, Bangalore, India
Correspondence: Amey Joshi, Director of Fidelity Investments, Pinehurst, Embassy Golf Links business park, Bangalore, 56007, Tel +91-8691-2046,
Received: May 03, 2018 | Published: June 14, 2018
Citation: Joshi A. Exact solution of plane Poiseuille flow in a channel filled with a porous medium. Fluid Mech Res Int. 2018;2(3):131-136. DOI: 10.15406/fmrij.2018.02.00029
In this paper, I have presented an analytical solution to the problem of plane Poiseuille flow in a channel filled with a porous medium. Nield et al.,1 have expressed it in terms of elliptic integrals. I express it in an equivalent, but a more conventional form, in terms of Weierstrass elliptic function. I also present the R code to plot the velocity profile and compute the flux.
The flow of an incompressible, Newtonian fluid through a porous medium of porosity εε
and permeability KK
is described by the equation2
∂→u∂t+→u.∇(→uε)=−∇(pερ)+νeΔ→u+→F,∂→u∂t+→u.∇(→uε)=−∇(pερ)+νeΔ→u+→F,
(1)
whereρρ
is the density of the fluid, →u→u
is the velocity,pp
the pressure,νeνe
the effective viscosity,νν
the kinematic viscosity, ΔΔ
denotes the Laplace operator and the total force is
→F=→Fb−ενK→u−εF0√Ku→u.→F=→Fb−ενK→u−εF0√Ku→u.
(2)
It is a sum of the body force →Fb→Fb
and the effect of the porosity of the medium. The geometric functionF0F0
in equation (2) depends only on the porosity and the nature of the solid particle matrix of the porous medium. For a fully developed and steady flow, the left hand side of equation (1) vanishes. Further, if the flow is driven only by a constant pressure gradient and not an external body force, then equation (1) becomes
νeΔ→u−ενK→u−εF0√Ku→u+ε→G=0,νeΔ→u−ενK→u−εF0√Ku→u+ε→G=0,
(3)
where ρ→G=−∇pρ→G=−∇p
. I will solve equation (3) for a flow between parallel solid plates with a porous medium between them.
Consider a steady, fully-developed flow of a fluid along the xx
axis between two infinite parallel plates, a distance HH
apart. Let the plates concide with planes y=0y=0
and y=Hy=H
. If the channel is long enough that the end effects are negligible along most of the channel's length then we can express the fluid's velocity along the xx
axis as u(y)u(y)
. Equation (3), in this case, becomes
νeεu''−νKu−F0√Ku2+εG=0,νeεu''−νKu−F0√Ku2+εG=0,
(4)
where u''u''
denotes the second derivative with respect to yy
. Since the channel is bounded by solid walls, the usual no-slip boundary conditions apply. I will solve (4) subject to the conditions u(y=0)=0u(y=00)=
and u'(H/2)=0
, that is, the velocity has an extremum (actually, a maximum) at the center of the channel. Nield et al.,1 have given an analytical solution which expresses the coordinate y
as an elliptic integral in the velocity u
. I will develop an equivalent solution in which u
is expressed as a Weierstrass elliptic function of y .
We convert equation (4) in a non-dimensional form using the relations,
u⋆=uU
(5)
y⋆=yH
(6)
G⋆=HGU2,
(7)
where U
is the velocity at the center of the channel, and the dimensionless quantities
Re=HUν
(8)
Da=KH2
(9)
J=νeν.
(10)
Re
,
Da
and J
are the Reynold's number, the Darcy number and the viscosity ratio of the flow. Dropping the ⋆
subscript for sake of notation clarity, we get,
u''−A2u2−B2u+C2=0,
(11)
where
A2=F0εReJ√Da
(12)
B2=εJDa
(13)
C2=ε2ReGJ
(14)
are all positive numbers. Introduce a new variable u1(y)
,
u1(y)=Au(y)+12B2A,
(15)
so that equation (11) becomes,
u''1−Au21+(AC2+B44A)=0,
(16)
Multiplying equation (16) by u'1
, the first derivative of u1(y)
with respect to y
, and integrating we get,
(u'1)2−23Au31+2(AC2+B44A)u1+36g3A2=0,
(17)
where 36g3/A2
is a constant of integration. Introduce yet another variable, u2(y)=(A/6)u1(y)
, to transform equation (17) to
(u'2)2=4u32−13(A2C2+B44)u2−g3.
(18)
This equation is of the form,
(u'2)2=4u32−g2u2−g3,
(19)
where
g2=13(A2C2+B44)
(20)
Its solution is u2(y)=℘(y+k1;g2,g3)
, where k1
is another constant of integration. The function ℘
is the Weierstrass elliptic function with invariants g2
and g3
.3 Therefore, the solution of (11) is
u(y)=6A2[℘(y+k1|13(A2C2+B44),g3)−B212]
(21)
The constants g3
and k1
are found using the boundary conditions.
Some properties of Weierstrass elliptic function
The Weierstrass elliptic function is defined as the solution of the differential equation,
[℘'(u)]2=4℘3(u)−g2℘(u)−g3,
(22)
where u
is a complex variable and g2
and g3
are complex constants, called invariants of ℘
. Weierstrass elliptic function is a doubly periodic function. We follow Lawden4 and call the periods 2ω1
and 2ω3
. There is another half period 2ω2
, where ω2=−ω1−ω3
. Whittaker et al.,3 denote the fundamental periods by ω1
and ω2
and define ω3=−ω1−ω2
.) If the constants ej
are defined as
ej=℘(ωj)
(23)
then it can be shown that [by Lawden4 p.160] they are solutions of the cubic equation 4s3−g2s−g3=0
. Further, they are related to the invariants as
g2=−4(e1e2+e2e3+e3e1)
(24)
g3=4e1e2e3
(25)
Additionally [Lawden4 p.159],
e1+e2+e3=0
(26)
The discriminant of the cubic equation 4t3−g2t−g3=0
is D=16(g32−27g23)
.
If
Theorem 1: If the invariants of Weierstrass elliptic function ℘ are real and if the roots of the cubic 4s3−g2s−g3=0 are real then ω1 is real and ω3 is imaginary.
Proof: The constants e1,e2,e3
are solutions of the cubic 4s3−g2s−g3=0
. If they are all real, we can choose them to be such that e1>e2>e3
. Then (22) can be written as
{(℘(u)−e1)(℘(u)−e2)(℘(u)−e3)}1/2=−12℘'(u)
that is,
d℘(u)√4(℘(u)−e1)(℘(u)−e2)(℘(u)−e3)=−du
equivalently,
dt√4(t−e1)(t−e2)(t−e3)=−du,
where t=℘(u)
. Integrating this equation so that u
goes from 0
to U
, and hence t
goes from ℘(0)
to ℘(U)
, we have two possibilities because of the double pole of ℘
at the origin,
∫℘(U)∞dt√4(t−e1)(t−e2)(t−e3)=−U
(27)
or
∫℘(U)−∞dt√4(t−e1)(t−e2)(t−e3)=−U
(28)
Choose U=ω1
in equation (27), so that
ω1=−∫℘(ω1)∞dt√4(t−e1)(t−e2)(t−e3)=∫∞e1dt√4(t−e1)(t−e2)(t−e3)
Since e1
is the largest root of 4(t−e1)(t−e2)(t−e3)=4t3−g2t−g3=0
, throughout the path of integration, the integrand stays finite. Further, the integrand is always real and hence ω1
is real.
Choose U=−ω3
in equation (28), so that
ω3=−∫℘(ω3)−∞dt√4(t−e1)(t−e2)(t−e3)=−∫e3−∞dt√4(t−e1)(t−e2)(t−e3)
or,
ω3=i∫e3−∞dt√4(e1−t)(e2−t)(e3−t)
Since e3
is the smallest root of 4(t−e1)(t−e2)(t−e3)=4t3−g2t−g3=0
, throughout the path of integration, the integrand stays finite. Further, the integrand is always real and hence ω3
is imaginary.
Remark: The converse of theorem 1 is also true [Lawden4 p.163]. That is, if ω1 is real and ω3 is imaginary then ej , the roots of 4s3−g2s−g3=0 are all real.
If ω1
is real and ω3
is imaginary then section 6.11 shows that4
Theorem 2: ℘
takes real values on the the rectangle OXAY
in Figure 1, where O≡(0,0),X≡(ω1,0),A≡(ω1,ω3)
and Y≡(0,ω3)
. Further, if u
is taken round OXAY
, ℘(u)
decreases from +∞
at O
to e1
at X
, further decreases to e2
along XA
, to e3
along AY
and finally to −∞
as it reaches the origin along YA
.
If the invariants g2 and g3 of the Weierstrass elliptic function are real but the discriminant of the cubic equation 4t3−g2t−g3=0 is negative, then referring to Figure 2 or Handbook of Mathematical Functions with Formulas5, the function ℘ takes value +∞ at O . Its value decreases monotonically upto −ω2 , where it is e2 and then rises once again to +∞ at −2ω2 . If the function has a singularity at the origin, it will have it at points −2ω2 , 2ω1 and 2ω3 because of its periodicity. The function also takes real values along the segment BD .
Finding g3 and k1
Since the velocity has an extremum at the center of the channel, its derivative with respect to y
vanishes there. Therefore, derivatives of u1
and u2
also vanish at the center of the channel. If the magnitude of the non-dimensional velocity u
at the center is uc=1
then we immediately have uc1=A+B2/(2A)
and
uc2=A26+B212
(29)
Since at the center,
4[uc2]3−g2uc2−g3=0,
uc2
is one of the roots of the cubic equation 4s3−g2s−g3=0
. If e1,e2,e3
are the roots, without loss of generality, let
uc2=e2
(30)
From these equations (24) to (26) we readily get,
e1=−e2+√g2−3e222
(31)
e3=−e2−√g2−3e222,
(32)
Knowing e1,e2
and e3
equation (25) gives,
g3=4e1e2e3
(33)
We will now use the second boundary condition u(0)=0
to find k1
. The equation u(0)=0
is equivalent to, ℘(0+k1;g2,g3)=B2/12
or
k1=℘−1(B212|g2,g3)
(34)
The inverse of Weiestrass elliptic function can be readily evaluated on the wolframalpha website using the Mathematica® function.
Listing 1: Evaluation of ℘−1 ,
InverseWeierstrassP[B^2/12, g_2, g_3] |
Let us assume that the equation 4s3−g2s−g3=0 has a positive discriminant. Then we saw in section 3.1 that ℘ will take real values on the the rectangle OXAY where O≡(0,0),X≡(ω1,0),A≡(ω1,ω3) and Y≡(0,ω3) . Further, if u is taken round OXAY , ℘(u) decreases from +∞ at O to e1 at X , further decreases to e2 along XA , to e3 along AY and finally to −∞ as it reaches the origin along YA . Thus, k1 will lie on OX is it is greater than e1 or on XA is it is between e1 and e2 or on AB if it is less than e2 . It cannot be less than e3 because e3 is always less than zero while B2/12>0 .
Supposing e1≥B2/12≥e2
, that is, k1
lies on XA
. Then we have to align the imaginary axis along the y
axis and plot values of
6A2℘(z|13(A2C2+B44),k0A236)−12B2A2
where the complex variable z
is z=ω1+z0
, where z0
ranges from 0
to ±2Im(k1)i
. Since k1
lies on XA
, ω1
is identical to Rek1
and hence z=Re(k1)+z0
. The following R code, with the library 'elliptic' was used to generate the velocity profile of Figure 3.6
Listing 2: Velocity profile of flow in porous medium
library(elliptic)
epsilon <- 0.1 # Porosity
Re <- 0.1 # Reynold's number
Da <- 5e-1 # Darcy number
J <- 1 # Viscosity ratio
G <- 1e-4 # Pressure gradient/density
F0 <- 1.75/sqrt(150 * epsilon^3) # Geometric function
# Calculation of A, B, C
A <- sqrt((F0 * epsilon * Re)/(J * sqrt(Da)))
B <- sqrt(epsilon/(J * Da))
C <- sqrt(epsilon^2 * Re * G/J)
g2 <- (A^2*C^2 + B^4/4)/3
u2_center <- A^2/6 + B^2/12
# Choose e2 as u2_center
e2 <- u2_center
e1 <- (-e2 + sqrt(g2 - 3*1i*(-1i)*e2^2))/2
e3 <- (-e2 - sqrt(g2 - 3*1i*(-1i)*e2^2))/2
g3 <- 4*e1*e2*e3
# Get half periods
Omegas <- half.periods(g = c(g2, g3))
# Recreate e's so that they are consistent with R
es <- e1e2e3(g = c(g2, g3))
# Computed using Mathematica
k1 <- 8.020971603238442 + 3.116271691054093i
# Observe that k1 is equal to Omegas[2].
# Print Omegas. Let omega1 be the real period and omega3 be the imaginary period.
#
# We want to plot the Weierstrass function along the imaginary # axis. We know that P(omega1) = e1 while e1 >= P0. The function # P falls below e1 both above and below omega1 if we move along # the imaginary axis. If it takes a value B^2/12 a distance Im(k1) # above omega1, it will take the same value a distance Im(k1) below # omega1. Therefore, we plot the function from omega1 - 1i*Im(k1) # omega1 + 1i * Im(k1).
z <- Omegas[2] + seq(from = 0, to = -2*Im(k1), len = 100)*1i y <- -Im(z)
u <- 6/A^2*( P(z + Im(k1)*1i, g = c(g2, g3)) - B^2/12)
# We choose real part alone. Check that the imaginary part # is very small. Use the command max(abs(Im(u))) to check # it.
# If the imaginary part is indeed quite small xl <- 'Dimensionless velocity' yl <- 'y' ml <- 'Velocity profile with porous media' plot(Re(u), y, type = 'l', xlab = xl, ylab = yl, main = ml)
The same code can be used if the equation 4s3−g2s−g3=0 has a negative discriminant and k1 is complex. In the event k1 is real, the code should be modified so that the real axis is along the y axis.
When we introduced the non-dimensional variables, we defined y⋆=y/H . Therefore, y⋆ should range from 0 to 1. However, we notice in Figure 3 that it does not. We will introduce another transformation that brings the non-dimensional displacement variable between 0 and 1 after proving its validity.
Theorem 3: If we introduce a new non-dimensional displacement variable ˜y⋆
defined as
˜y⋆=y⋆α,
where α
is a positive real number then this transformation keeps the form of equation (11) unchanged.
Proof: For sake of clarity, let us write the derivatives in full and re-introduce the ′⋆′
subscript for non-dimensional variables. Thus, equation (11) is written as
d2u⋆dy⋆2−A2u2⋆−B2u⋆+C2=0
(35)
If the non-dimensionalization of y
is done with αH
, where α
is a positive real number then
˜y⋆=yαH=y⋆α
If f
is a function of y
then
dfdy⋆=dfd˜y⋆d˜y⋆dy⋆=1αdfd˜y⋆
and hence
d2u⋆dy⋆2=1α2d2u⋆d˜y⋆2
If we denote the new dimensionless numbers with a tilde on top then from equations (8) to (10),
˜Re=αRe
(36)
˜Da=Daα2
(37)
˜J=J
(38)
The new pressure gradient is ˜G⋆=αG⋆
while the new constants ˜A
, ˜B
and ˜C
become
˜A2=F0ε˜Re˜J√˜Da=α2A2
(39)
˜B2=ε˜J˜Da=α2B2
(40)
˜C2=ε2˜Re˜G˜J=α2C2
(41)
Therefore, equation (35) becomes,
1α2d2u⋆d˜y⋆2−˜A2α2u2⋆−˜B2α2u⋆+˜C2α2=0
or
d2u⋆d˜y⋆2−˜A2u2⋆−˜B2u⋆+˜C2=0
The vertical axis of the graph in Figure 3 extends from 0
to 2Im(k1)
. To shrink it to 0
to 1
, we choose α=2*Im(k1)
, in this case 6.232543
. After changing the constants A
, B
and C
we proceed in similar fashion as before to get the plot in Figure 4.
The code to generate the plot is
Listing 3: Velocity profile of flow in porous medium
library(elliptic)
epsilon <- 0.1 # Porosity
Re <- 0.1 # Reynold's number
Da <- 5e-1 # Darcy number
J <- 1 # Viscosity ratio
G <- 1e-4 # Pressure gradient
F0 <- 1.75/sqrt(150 * epsilon^3) # Geometric function
# Re-normalize y using this factor
alpha <- 6.232543
# Calculation of A, B, C
# However, for sake of simplicity, we call the variables A, B and C.
A <- sqrt((F0 * epsilon * Re)/(J * sqrt(Da))) * alpha
B <- sqrt(epsilon/(J * Da)) * alpha
C <- sqrt(epsilon^2 * Re * G/J) * alpha
g2 <- (A^2*C^2 + B^4/4)/3
u2_center <- A^2/6 + B^2/12
# Choose e2 as u2_center
e2 <- u2_center
e1 <- (-e2 + sqrt(g2 - 3*1i*(-1i)*e2^2))/2
e3 <- (-e2 - sqrt(g2 - 3*1i*(-1i)*e2^2))/2
g3 <- 4*e1*e2*e3
Omegas <- half.periods(g = c(g2, g3)) print(Omegas)
# Computed using Mathematica
k1 <- 1.286949924601859 + 0.5000000786725393i
P(k1, g = c(g2, g3), give.all.3 = T)
z <- Re(k1) + seq(from = 0, to = -2*Im(k1), len = 100)*1i
y <- -Im(z)
u <- 6/A^2*( P(z + Im(k1)*1i, g = c(g2, g3)) - B^2/12 )
# We choose real part alone. Check that the imaginary part # is very small. Use the command max(abs(Im(u))) to check # it.
xl <- 'Dimensionless velocity'
yl <- 'Dimensionless y'
ml <- 'Velocity profile with porous media' plot(Re(u), y, type = 'l', xlab = xl, ylab = yl, main = ml)
To compare the flow profiles with and without porous medium we choose the pressure gradient in the latter case so that the flow has the same peak velocity as in the former case. If we run the code in listing 4 after the one in listing 3, we can have the two profiles in the same plot as shown in Figure 5.
Listing 4: Comparison of velocity profiles
# To compare flows with and without porous media,
# adjusting the pressure gradient in the second
# case so that they have the same maximum velocity.
umax <- max(abs(Re(u)))
G.eq <- 2*mu*umax/(Im(k1)^2)
w.eq <- G.eq/mu * y * (Im(k1) - y/2)
xl <- 'Dimensionless velocity'
yl <- 'Dimensionless y'
ml <- 'Comparing flows with and without porous medium.'
plot(Re(u), y, type = 'l', col = 'blue', xlab = xl, ylab = yl, main = ml)
lines(w.eq, y, col = 'red')
legend.list <- c('With porous medium', 'Without porous medium'
legend(x = 'topright', legend.list, lty = c(1, 1), lwd=c(2.5,2.5),col=c('blue','red'))
The flux of volume of fluid past a section of the channel is probably more important in practice than the velocity profile. In this section, I will calculate the flux in the channel. If s denotes the transverse dimension of the channel then the flux Q is Q=∫h0uds,
where h
is the width of the channel and u
is velocity of the fluid. If the channel does not have porous medium then
u=G2μs(h−s)
and hence the flux Q0
is
Q0=Gh312μ
(42)
On the other hand if the channel is stuffed with porous medium then, the flux Q1
is
Q1=∫h06A2[℘(s+k1|13(A2C2+B44),g3)−B212]ds
(43)
In terms of non-dimensional parameters h=1
and hence Q0=G/(12μ)
. If we adjust pressure gradient so that peak velocity matches with that when porous medium is present, then code listing 5 gives Q0=0.6665793
. Carrying out the integration in equation (43) and noting that s=iy
, we get Q1=0.6321661
. As expected from Figure 5, Q1<Q0
. Note that listing 5 is meant to be run after running listing (4).
Listing 5: Calculation of flux,
# Flux in presence of porous medium
# up denotes the 'velocity function' when porous medium is present
up <- function(x) {6/A^2*( P(x + Im(k1)*1i, g = c(g2, g3)) - B^2/12)}
# We multiply the integral by i because the integral was carried out along the imaginary axis.
Q1 <- integrate.segments(up, c(z[1], z[100]), close = F)*1i
# Flux in absence of porous medium
Q0 <- G.eq/(12*mu)
There is another way to compute the flux of flow in a porous medium. It uses the relation between Weierstrass ℘
function and Weierstrass (not Riemann) ζ
function.4
℘(y)=−ζ'(y)
Therefore, we get an analytical expression for Q1
,
Q1=6A2[ζ(k1|g2,g3)−ζ(1+k1|g2,g3)]−B22A2
(45)
The library 'elliptic' allows us to evaluate Weierstrass ζ
function. The listing 5, if run after listing 5 computes
Q1=0.6321664
.6
Listing 6: Another way to compute flux
# We calculate the two terms in equation (45) separately.
Q11 <- 6/A^2*(zeta(z[1] + Im(k1)*1i, g = c(g2, g3)) - zeta(z[100] + Im(k1)*1i, g = c(g2, g3)))
Q12 <- B^2/(2*A^2)*(z[100] - z[1])
# We multiply the result by i because the integral was carried out along the imaginary axis.
Q1.using.zeta <- (Q11 - Q12)*1i
None.
Author declares there is no conflict of interest in publishing the article.
©2018 Joshi. This is an open access article distributed under the terms of the, which permits unrestricted use, distribution, and build upon your work non-commercially.