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:


A rotina de solução da Equação de Colebrook-White é mostrada a seguir. Ela é escrita em FORTRAN90.

subroutine Fator_de_Atrito_Moody(ro,um,ni,e_D,Re_D,fator_de_atrito)

 implicit none

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

      case (2) ! Escoamento de Transição (calcula tanto o fator laminar quanto o turbulento, mas mantém o turbulento)

        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

Postagens mais visitadas deste blog

Engenharia Reversa do "Boundary Layer Module" - Parte 1

Engenharia Reversa do "Boundary Layer Module" - Parte 2

Ordenação Lexicográfica: Aumento de Complexidade versus Redução de Recurso Computacional