A matemática como ferramenta para compreender os fenômenos físicos: o caso da Camada Limite Laminar
Certa vez resolvi uma lista de exercícios, na qual o professor pediu para deduzir e resolver numericamente a denominada Solução de Blasius da camada limite laminar sobre uma placa plana. O resultado foi o gráfico aparece à esquerda da figura, cuja abscissa representa a velocidade do escoamento e a ordenada representa a distância a partir da superfície da placa em contato com o escoamento. Até aí nada de mais, porém algum tempo atrás eu encontrei uma fotografia da camada limite laminar (infelizmente eu não tenho certeza do nome do livro onde achei a foto). Ela aparece no centro da figura. A figura da direita mostra a sobreposição da solução do modelo matemático com o resultado experimental.
program
Equacao_de_Blasius
use portlib
implicit
none
integer:: i,j
integer:: n
real*8:: etta
real*8:: d_etta
real*8:: a
real*8,allocatable,dimension(:)::
f
real*8,allocatable,dimension(:)::
fl
real*8,allocatable,dimension(:)::
ap,aw,aww,awww,bp
integer :: jmax
real*8 :: tol
open(1,file='saida.txt')
1 format(i4, 5(1x, 1pe10.3))
tol = 1d-8 ! Default:
1.0d-7 ou 1.0d-8
jmax = 200
d_etta = 5.0d-4 ! Default: 1.0d-3 ou 5.0d-4
etta = 1.0d1
n = 1 + etta / d_etta
write(1,*)'etta:', etta
write(1,*)'d_etta:', d_etta
write(1,*)'n:', n
allocate(f(0:n-1),ap(0:n-1),aw(0:n-1),aww(0:n-1),awww(0:n-1),bp(0:n-1),fl(0:n-2))
f = 0.0d0
i = 0
ap(i) = 1.0d0
aw(i) = 0.0d0
aww(i) = 0.0d0
awww(i) = 0.0d0
bp(i) = 0.0d0
write(1,1) i,
ap(i), aw(i), aww(i), awww(i), f(i)
i = 1
ap(i) = 1.0d0
aw(i) = 0.0d0
aww(i) = 0.0d0
awww(i) = 0.0d0
bp(i) = 0.0d0
write(1,1) i,
ap(i), aw(i), aww(i), awww(i), f(i)
! Chute inicial
para f(2):
f(2) = d_etta**2.0d0
do j = 1,
jmax
do i
= 3, n-1
ap(i) =
2.0d0/(d_etta**3.0d0) + f(i)/(d_etta**2.0d0)
aw(i) = -6.0d0/(d_etta**3.0d0) -
2.0d0*f(i)/(d_etta**2.0d0)
aww(i) = 6.0d0/(d_etta**3.0d0) + f(i)/(d_etta**2.0d0)
awww(i)=
-2.0d0/(d_etta**3.0d0)
bp(i) =
0.0d0
f(i) = ( bp(i) -
aw(i)*f(i-1) - aww(i)*f(i-2) - awww(i)*f(i-3)) / ap(i)
if(j==jmax)write(1,1)
i, ap(i), aw(i), aww(i), awww(i), f(i)
end do
!end do
if(j==jmax)
write(1,*)'=================='
! correção de
f(2):
a = (f(n-1) - f(n-2))/d_etta
! a = (f(n-1) - 2*f(n-2) + f(n-3) )/d_etta**2
! write(*,*) j, a !;pause
! write(*,*) a;pause
! f(2) = d_etta**2.0d0 * a**(-1.5d0)
if(a>1.0d0)
then
f(2) = f(2) - tol*abs(1-a)
elseif(a<1.d0)
then
f(2) = f(2) + tol*abs(1-a)
elseif(a==1.d0)
then
exit
endif
if(j==jmax)
write(1,*)'a:',a
if(j==jmax)
write(1,*)'f(2):',f(2)
do i
= 3, n-1
ap(i) =
2.0d0/(d_etta**3.0d0) + f(i)/(d_etta**2.0d0)
aw(i) = -6.0d0/(d_etta**3.0d0) -
2.0d0*f(i)/(d_etta**2.0d0)
aww(i) = 6.0d0/(d_etta**3.0d0) + f(i)/(d_etta**2.0d0)
awww(i)=
-2.0d0/(d_etta**3.0d0)
bp(i) =
0.0d0
f(i) = ( bp(i) -
aw(i)*f(i-1) - aww(i)*f(i-2) - awww(i)*f(i-3)) / ap(i)
if(j==jmax) write(1,1)
i, ap(i), aw(i), aww(i), awww(i), f(i)
end do
end
do
close(1)
write(*,*)
f(2)/d_etta**2
open(2,file='saida2.txt')
2 format(2(1x, 1pe25.10))
! Cálculo da
derivada de primeria ordem usando DDS:
do i = 0, n-2
fl(i) = (f(i+1)-f(i))/d_etta
write(2,2)
fl(i),i*d_etta
end
do
close(2)
open(3,file='grafico_fl_x_eta.txt')
write(3,*)
"set grid"
write(3,*)
"set xlabel 'Derivada de f [u/U_inf]'"
write(3,*)
"set ylabel 'etta = (y/x)Re**(1/2)'"
write(3,*)
"set xrange[ ", -0.01, ": ", 1.01, "
]"
write(3,*)
"set yrange[ ", -.01, ": ", etta, "
]"
write(3,*)
"set title 'Perfil de velocidades - solução
similaridade'"
write(3,*) "plot 'saida2.txt' using 1:2 with lines"
close(3)
i=system('wgnuplot grafico_fl_x_eta.txt')
!i=system('saida.txt')
end program Equacao_de_Blasius

Comentários
Postar um comentário