💻 Fortran Source Code Library

We currently offer 172 open-source, production-grade Fortran codes for offline testing. Run calculations locally on your own machine, view code structure, read technical explanations, and download compilation packages including sample input files.

Thermal Entry Length Calculator

Core Numerical Engine in Fortran 90 • 25 total downloads

entry_length.f90
! =========================================================================
! Source File: entry_length.f90
! =========================================================================

program entry_length
    implicit none
    double precision :: D, V, Ti, Tw, Lp, rho, mu, kf, Pr, cp, bc_val
    integer :: fl_type, bc_type
    
    double precision :: Tf, dT, nu, Re, Gz, Lh, Lt, Nufd, Nud, h, As, Q, To, g, f, pi
    integer :: iostat_val, i
    double precision :: temp_val(6)
    double precision :: xs, Gzs, Nuds, hs
    
    pi = 3.141592653589793d0
    
    ! Read inputs sequentially
    read(*,*,iostat=iostat_val) D
    read(*,*,iostat=iostat_val) V
    read(*,*,iostat=iostat_val) Ti
    read(*,*,iostat=iostat_val) Tw
    read(*,*,iostat=iostat_val) Lp
    read(*,*,iostat=iostat_val) fl_type
    
    ! Read custom parameters
    read(*,*,iostat=iostat_val) temp_val(1) ! rho
    read(*,*,iostat=iostat_val) temp_val(2) ! mu
    read(*,*,iostat=iostat_val) temp_val(3) ! kf
    read(*,*,iostat=iostat_val) temp_val(4) ! Pr
    read(*,*,iostat=iostat_val) temp_val(5) ! cp
    read(*,*,iostat=iostat_val) bc_val      ! boundary condition 1=UWT, 2=UHF
    
    if (iostat_val /= 0) then
        write(*,*) 'ERROR: Failed to read all input values.'
        stop
    end if
    
    bc_type = int(bc_val)
    Tf = (Ti + Tw) / 2.0d0
    dT = abs(Tw - Ti)
    
    ! Select defaults based on fluid type
    if (fl_type == 1) then
        ! Air
        rho = 1.177d0
        mu = 1.85d-5
        kf = 0.0263d0
        Pr = 0.71d0
        cp = 1007d0
    else if (fl_type == 2) then
        ! Water
        rho = 997d0
        mu = 8.9d-4
        kf = 0.613d0
        Pr = 6.13d0
        cp = 4180d0
    else
        ! Engine Oil
        rho = 870d0
        mu = 0.05d0
        kf = 0.14d0
        Pr = 500d0
        cp = 2000d0
    end if
    
    ! Override with custom parameters if provided
    if (temp_val(1) > 0.0d0) rho = temp_val(1)
    if (temp_val(2) > 0.0d0) mu = temp_val(2)
    if (temp_val(3) > 0.0d0) kf = temp_val(3)
    if (temp_val(4) > 0.0d0) Pr = temp_val(4)
    if (temp_val(5) > 0.0d0) cp = temp_val(5)
    
    nu = mu / rho
    Re = rho * V * D / mu
    Gz = (D / Lp) * Re * Pr
    
    ! Hydrodynamic and thermal entry lengths
    if (Re <= 2300.0d0) then
        ! Laminar
        Lh = 0.05d0 * Re * D
        Lt = Lh * Pr
    else
        ! Turbulent
        Lh = 10.0d0 * D
        Lt = 10.0d0 * D
    end if
    
    ! Nusselt calculations
    if (Re <= 2300.0d0) then
        ! Laminar flow
        if (bc_type == 1) then
            ! Constant Wall Temp (UWT)
            Nufd = 3.66d0
            Nud = 3.66d0 + 0.0668d0 * Gz / (1.0d0 + 0.04d0 * Gz**(2.0d0/3.0d0))
        else
            ! Constant Heat Flux (UHF)
            Nufd = 4.36d0
            if (Gz > 0.001d0) then
                Nud = 1.953d0 * Gz**(1.0d0/3.0d0)
                if (Nud < 4.36d0) Nud = 4.36d0
            else
                Nud = 4.36d0
            end if
        end if
    else
        ! Turbulent flow (Gnielinski + Entry length correction)
        f = (0.790d0 * log(Re) - 1.64d0)**(-2)
        Nufd = (f / 8.0d0) * (Re - 1000.0d0) * Pr / &
               (1.0d0 + 12.7d0 * sqrt(f / 8.0d0) * (Pr**(2.0d0/3.0d0) - 1.0d0))
        Nud = Nufd * (1.0d0 + (D / Lp)**0.7d0)
    end if
    
    h = Nud * kf / D
    As = pi * D * Lp
    
    ! Heat transfer and outlet temperature
    if (bc_type == 1) then
        ! UWT
        To = Tw - (Tw - Ti) * exp(-h * As / (rho * V * (pi * D**2 / 4.0d0) * cp))
        Q = rho * V * (pi * D**2 / 4.0d0) * cp * (To - Ti)
    else
        ! UHF
        Q = h * As * dT
        To = Ti + Q / (rho * V * (pi * D**2 / 4.0d0) * cp)
    end if
    
    write(*,'(A)') '============================================'
    write(*,'(A)') '  INTERNAL FLOW ENTRY LENGTH HEAT TRANSFER'
    write(*,'(A)') '============================================'
    write(*,*)
    write(*,'(A,ES14.4)') '  Reynolds Re             = ', Re
    write(*,'(A,F12.4)')    '  Graetz Number           = ', Gz
    write(*,'(A,F12.4)')    '  Nu Developing           = ', Nud
    write(*,'(A,F12.4)')    '  Nu Fully                = ', Nufd
    write(*,'(A,F12.4,A)')  '  Coeff h                 = ', h, ' W/m2K'
    write(*,'(A,F12.4,A)')  '  Transfer Q              = ', abs(Q), ' W'
    write(*,'(A,F12.2,A)')  '  T_out                   = ', To, ' C'
    write(*,'(A,F12.4,A)')  '  Entry Len L_h           = ', Lh, ' m'
    write(*,'(A,F12.4,A)')  '  Entry Len L_t           = ', Lt, ' m'
    write(*,*)
    
    write(*,'(A)') '--- LENGTH SWEEP ---'
    write(*,'(A)') '  x[m]       Gz           Nu_local     h_local[W/m2K]'
    write(*,'(A)') '  --------------------------------------------------------'
    do i=1,25
        xs = max(0.001d0 * Lp, 1.0d-4) + (Lp - max(0.001d0 * Lp, 1.0d-4))*dble(i-1)/24.0d0
        Gzs = (D / xs) * Re * Pr
        if (Re <= 2300.0d0) then
            if (bc_type == 1) then
                Nuds = 3.66d0 + 0.0668d0 * Gzs / (1.0d0 + 0.04d0 * Gzs**(2.0d0/3.0d0))
            else
                if (Gzs > 0.001d0) then
                    Nuds = 1.953d0 * Gzs**(1.0d0/3.0d0)
                    if (Nuds < 4.36d0) Nuds = 4.36d0
                else
                    Nuds = 4.36d0
                end if
            end if
        else
            Nuds = Nufd * (1.0d0 + (D / xs)**0.7d0)
        end if
        hs = Nuds * kf / D
        write(*,'(2X,F8.4,2X,ES10.3,2X,F12.4,2X,F14.4)') xs, Gzs, Nuds, hs
    end do
    write(*,*)
end program entry_length


Solver Description

Evaluates boundary layer entry lengths (hydrodynamic $L_h$ and thermal $L_t$) for internal flow inside tubes. Computes local developing and fully developed Nusselt numbers under uniform wall temperature (Hausen correlation) and uniform heat flux conditions.

Key Numerical Methods & Architecture

  • Input Redirection: Reads parameters sequentially from standard input (`stdin`) using Fortran sequential read (`read(*,*)`), ensuring modular integration.
  • Modular Design: Formulated using pure mathematical routines, separation of equations from output formatting, and precise numerical solvers (e.g. bisection, Newton-Raphson).
  • Standard Compliant: Written in clean, standards-compliant Fortran 90 to ensure cross-compiler compatibility.

🛠️ Local Compilation

To test this code on your machine, compile the source code file(s) using a standard Fortran compiler (e.g., `gfortran`).

Compilation Command:

gfortran -O3 entry_length.f90 -o entry_length

Execution Command:

Execute the program by feeding the sample input file into the program using stdin redirection:

entry_length < input.txt

📥 Downloads & Local Files

Preview of the required input file (input.txt):

! Pipe diameter D [m]
0.025
! Mean flow velocity V [m/s]
1.0
! Inlet fluid temperature Tin [C]
25.0
! Wall temperature Tw [C]
80.0
! Pipe length L [m]
0.5
! Fluid type (1=Air, 2=Water, 3=Oil)
1
! Custom density [kg/m3] (0=auto)
0.0
! Custom viscosity [Pa-s] (0=auto)
0.0
! Custom thermal conductivity [W/m-K] (0=auto)
0.0
! Custom Prandtl number (0=auto)
0.0
! Custom specific heat [J/kg-K] (0=auto)
0.0
! Boundary condition type (1=Uniform Wall Temp, 2=Uniform Heat Flux)
1.0