⚡ Fortran 90 / 2008 Double Precision
📥 433 Downloads

Thermal Entry Length Calculator

Standalone, self-contained numerical routine. Verify algorithms, inspect boundary condition equations, or compile locally for batch parametric runs.

🔬

Solver Purpose & Physical Scope

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.

📂 Discipline: Convection Precision: IEEE-754 64-bit Real(`real(8)`) 📥 Total Downloads: 433 times 📄 Source File: entry_length.f90
📁 calcul/Convection / 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


💻 How to Compile & Run Locally

1. Compilation (GNU Fortran / Intel oneAPI):

gfortran -O3 entry_length.f90 -o entry_length

2. Execution with input.txt redirection:

entry_length < input.txt

📄 Sample input.txt File Structure

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