Construindo o Diagrama de Moody
Um tempo atrás implementei uma rotina para resolver a equação de Colebrook-White, que descreve o fator de atrito em escoamentos turbulentos. Sendo uma equação transcendental, não é possível isolar o fator de atrito diretamente. Por isso usei o método da bisseção para resolvê-la numericamente.
Depois tive uma ideia: construir o Diagrama de Moody que aparece nos livros de Mecânica dos Fluidos. Tomei os valores típicos de rugosidade relativa e/D e resolvi para cada valor, e pelo menos 1000 valores do número de Reynolds. Também inclui a solução para escoamento laminar, obtendo o seguinte diagrama:
subroutine
Fator_de_Atrito_Moody(ro,um,ni,e_D,Re_D,fator_de_atrito)
integer ::
tipo_esc ! Tipo de escoamento (1 p/ laminar; 2 p/
transição e 3 p/ turbulento)
real(8),intent(in) :: ro
! Massa específica do fluido [kg/m3]
real(8),intent(in) :: um
! Velocidade média do escoamento [m/s]
real(8),intent(in) :: ni
! Viscosidade cinemática do fluido [m2/s]
real(8),intent(in) :: Re_D ! Número de
Reynolds
real(8),intent(out) :: fator_de_atrito ! Fator de atrito de Moody ou Fator de atrito de Darcy [s/
dimensão]
real(8),intent(in) :: e_D ! e/D = Rugosidade
relativa (ver valores típicos de 'e' na tabela abaixo)
!Processo de |
!de fabricação | e[micrometros]
! |
!Extrudado | 1.5d0
!Aço comercial | 46.0d0
!Ferro fundido | 260.0d0
!Concreto |
3.0d2 à 3.0d3
!==============================
! Auxiliary variables
integer :: it
integer :: itmax
real(8) :: x
real(8) :: raiz_f0
real(8) :: raiz_f1
real(8) :: raiz_f,
f !Raiz
quadrada do fator de atrito de Moody, f**5.d-1
! Equação
transcendental de Colebrook para escoamento turbulento:
f(x) = 1.0d+0/x + 2.0d+0*dlog10(e_D/3.7d+0 + 2.51d+0/(Re_D*x))
! Inicialização
das variáveis
itmax = 10000
if(Re_D<=2.0d+3) tipo_esc = 1 ! Escoamento laminar
if(Re_D
>2.0d+3.and.Re_D<4.0d+3) tipo_esc = 2 !
Escoamento de transição
if(Re_D>=4.0d+3) tipo_esc = 3 ! Escoamento turbulento
select case (tipo_esc)
case (1) ! Escoamento Laminar
fator_de_atrito = 6.4d+1/Re_D
raiz_f0 = sqrt(8.0d-3)
raiz_f1 = sqrt(1.0d-1)
do
it = 1, itmax
raiz_f = 0.5d0 * ( raiz_f0 + raiz_f1 )
if (
f(raiz_f) * f(raiz_f0) > 0.0d+0 ) then
raiz_f0 = raiz_f
else
raiz_f1 = raiz_f
end if
if ( abs(raiz_f1-raiz_f0) < 1.d-15 ) exit
end do
if (it > itmax) write(*,*)"O processo de calculo do fator de atrito nao convergiu com", itmax, "iteracoes!"
fator_de_atrito = raiz_f*raiz_f
!write(*,*)"Fator de
atrito Turbulento:",fator_de_atrito
case (3) ! Escoamento Turbulento
raiz_f0 = sqrt(8.0d-3)
raiz_f1 = sqrt(1.0d-1)
do
it = 1, itmax
raiz_f = 0.5d0 * ( raiz_f0 + raiz_f1 )
if (
f(raiz_f) * f(raiz_f0) > 0.0d+0 ) then
raiz_f0 = raiz_f
else
raiz_f1 = raiz_f
end if
if ( abs(raiz_f1-raiz_f0) < 1.d-15 ) exit
end do
if (it > itmax) write(*,*)"O processo de calculo do fator de atrito nao convergiu com", itmax, "iteracoes!"
fator_de_atrito = raiz_f*raiz_f
end select
end subroutine Fator_de_Atrito_Moody

Comentários
Postar um comentário