💻 Fortran Source Code Library

Run calculations locally on your own machine. View code structure, read technical explanations, and download compilation packages including sample input files.

Flat Plate Boundary Layer Convection

Core Numerical Engine in Fortran 90 • 0 total downloads

flat_plate_convection.f90
! =========================================================================
! Source File: flat_plate_convection.f90
! =========================================================================

program flat_plate_convection
    implicit none
    
    ! Variables
    double precision :: L, T_s, T_inf, U_inf, rho, mu, nu, k_f, Pr, Cp
    double precision :: Re_L, Re_x, Re_crit, x_crit
    double precision :: Nu_lam, Nu_turb, Nu_mixed, h_avg
    double precision :: Q_total, A, W
    double precision :: delta_lam, delta_turb, Cf_lam, Cf_turb
    double precision :: delta_t_lam
    character(len=20) :: flow_regime
    integer :: i, n_points
    double precision :: x, dx, local_Re, local_Nu, local_h
    double precision :: local_Cf, local_delta
    
    ! Read inputs
    read(*,*) L        ! Plate length [m]
    read(*,*) W        ! Plate width [m]
    read(*,*) T_s      ! Surface temperature [°C]
    read(*,*) T_inf    ! Free stream temperature [°C]
    read(*,*) U_inf    ! Free stream velocity [m/s]
    read(*,*) rho      ! Fluid density [kg/m³]
    read(*,*) mu       ! Dynamic viscosity [Pa·s]
    read(*,*) k_f      ! Thermal conductivity [W/m·K]
    read(*,*) Pr       ! Prandtl number
    read(*,*) Cp       ! Specific heat [J/kg·K]
    
    ! Calculate properties
    nu = mu / rho
    A = L * W
    Re_crit = 5.0d5
    
    ! Reynolds number at trailing edge
    Re_L = U_inf * L / nu
    
    ! Determine flow regime
    if (Re_L < Re_crit) then
        flow_regime = 'Laminar'
    else
        flow_regime = 'Mixed (Lam+Turb)'
    end if
    
    ! Critical length (transition point)
    x_crit = Re_crit * nu / U_inf
    if (x_crit > L) x_crit = L
    
    ! ============================================
    ! AVERAGE NUSSELT NUMBER CALCULATIONS
    ! ============================================
    
    ! Laminar correlation (entire plate laminar): Nu = 0.664 Re^0.5 Pr^(1/3)
    Nu_lam = 0.664d0 * Re_L**0.5d0 * Pr**(1.0d0/3.0d0)
    
    ! Turbulent correlation (entire plate turbulent): Nu = 0.037 Re^0.8 Pr^(1/3)
    Nu_turb = 0.037d0 * Re_L**0.8d0 * Pr**(1.0d0/3.0d0)
    
    ! Mixed correlation: Nu = (0.037 Re^0.8 - 871) Pr^(1/3)
    if (Re_L > Re_crit) then
        Nu_mixed = (0.037d0 * Re_L**0.8d0 - 871.0d0) * Pr**(1.0d0/3.0d0)
    else
        Nu_mixed = Nu_lam
    end if
    
    ! Average heat transfer coefficient
    h_avg = Nu_mixed * k_f / L
    
    ! Total heat transfer
    Q_total = h_avg * A * abs(T_s - T_inf)
    
    ! Boundary layer thicknesses at trailing edge
    if (Re_L < Re_crit) then
        delta_lam = 5.0d0 * L / sqrt(Re_L)
        delta_turb = 0.0d0
        Cf_lam = 1.328d0 / sqrt(Re_L)
        Cf_turb = 0.0d0
    else
        delta_lam = 5.0d0 * x_crit / sqrt(Re_crit)
        delta_turb = 0.37d0 * L / Re_L**0.2d0
        Cf_lam = 1.328d0 / sqrt(Re_crit)
        Cf_turb = 0.074d0 / Re_L**0.2d0
    end if
    
    ! Thermal boundary layer thickness (laminar)
    delta_t_lam = delta_lam / Pr**(1.0d0/3.0d0)
    
    ! ============================================
    ! OUTPUT RESULTS
    ! ============================================
    write(*,'(A)') '============================================================'
    write(*,'(A)') '   FORCED CONVECTION - FLOW OVER A FLAT PLATE'
    write(*,'(A)') '============================================================'
    write(*,*)
    write(*,'(A)') '--- INPUT PARAMETERS ----------------------------------------'
    write(*,'(A,F12.4,A)') '  Plate Length (L)        = ', L, ' m'
    write(*,'(A,F12.4,A)') '  Plate Width (W)         = ', W, ' m'
    write(*,'(A,F12.4,A)') '  Surface Area (A)        = ', A, ' m²'
    write(*,'(A,F12.2,A)') '  Surface Temperature     = ', T_s, ' °C'
    write(*,'(A,F12.2,A)') '  Free Stream Temperature = ', T_inf, ' °C'
    write(*,'(A,F12.4,A)') '  Free Stream Velocity    = ', U_inf, ' m/s'
    write(*,*)
    write(*,'(A)') '--- FLUID PROPERTIES ----------------------------------------'
    write(*,'(A,ES12.4,A)') '  Density (ρ)             = ', rho, ' kg/m³'
    write(*,'(A,ES12.4,A)') '  Dynamic Viscosity (μ)   = ', mu, ' Pa·s'
    write(*,'(A,ES12.4,A)') '  Kinematic Viscosity (ν) = ', nu, ' m²/s'
    write(*,'(A,F12.4,A)')  '  Thermal Conductivity    = ', k_f, ' W/m·K'
    write(*,'(A,F12.4)')    '  Prandtl Number (Pr)     = ', Pr
    write(*,*)
    write(*,'(A)') '--- FLOW ANALYSIS -------------------------------------------'
    write(*,'(A,ES12.4)')   '  Reynolds Number (Re_L)  = ', Re_L
    write(*,'(A,ES12.4)')   '  Critical Re             = ', Re_crit
    write(*,'(A,A)')        '  Flow Regime             = ', trim(flow_regime)
    write(*,'(A,F12.4,A)')  '  Transition Point (x_cr) = ', x_crit, ' m'
    write(*,*)
    write(*,'(A)') '--- HEAT TRANSFER RESULTS -----------------------------------'
    write(*,'(A,F12.4)')    '  Average Nusselt Number  = ', Nu_mixed
    write(*,'(A,F12.4,A)')  '  Average h               = ', h_avg, ' W/m²·K'
    write(*,'(A,F12.4,A)')  '  Total Heat Transfer (Q) = ', Q_total, ' W'
    write(*,*)
    write(*,'(A)') '--- BOUNDARY LAYER ------------------------------------------'
    if (Re_L < Re_crit) then
        write(*,'(A,F12.6,A)') '  δ at trailing edge      = ', delta_lam*1000, ' mm'
        write(*,'(A,F12.6,A)') '  δ_thermal at trailing    = ', delta_t_lam*1000, ' mm'
        write(*,'(A,ES12.4)')  '  Average Cf (laminar)    = ', Cf_lam
    else
        write(*,'(A,F12.6,A)') '  δ_lam at transition     = ', delta_lam*1000, ' mm'
        write(*,'(A,F12.6,A)') '  δ_turb at trailing edge = ', delta_turb*1000, ' mm'
        write(*,'(A,ES12.4)')  '  Cf_lam (at transition)  = ', Cf_lam
        write(*,'(A,ES12.4)')  '  Cf_turb (average)       = ', Cf_turb
    end if
    write(*,*)
    
    ! ============================================
    ! LOCAL PROFILE DATA (for chart)
    ! ============================================
    write(*,'(A)') '--- LOCAL PROFILE ALONG PLATE --------------------------------'
    write(*,'(A)') '  x [m]       Re_x          Nu_x         h_x [W/m2.K]  d [mm]'
    write(*,'(A)') '  ------------------------------------------------------------'
    
    n_points = 40
    dx = L / dble(n_points)
    
    do i = 1, n_points
        x = dble(i) * dx
        local_Re = U_inf * x / nu
        
        if (local_Re < Re_crit) then
            ! Laminar
            local_Nu = 0.332d0 * sqrt(local_Re) * Pr**(1.0d0/3.0d0)
            local_delta = 5.0d0 * x / sqrt(local_Re)
            local_Cf = 0.664d0 / sqrt(local_Re)
        else
            ! Turbulent
            local_Nu = 0.0296d0 * local_Re**0.8d0 * Pr**(1.0d0/3.0d0)
            local_delta = 0.37d0 * x / local_Re**0.2d0
            local_Cf = 0.0592d0 / local_Re**0.2d0
        end if
        
        local_h = local_Nu * k_f / x
        
        write(*,'(F8.4,2X,ES12.4,2X,F10.2,4X,F10.4,4X,F10.4)') &
            x, local_Re, local_Nu, local_h, local_delta*1000
    end do
    
    write(*,*)
    write(*,'(A)') '--- CORRELATIONS USED ---------------------------------------'
    write(*,'(A)') '  Laminar:    Nu_x = 0.332 Re_x^0.5 Pr^(1/3)'
    write(*,'(A)') '  Turbulent:  Nu_x = 0.0296 Re_x^0.8 Pr^(1/3)'
    write(*,'(A)') '  Average:    Nu_L = (0.037 Re_L^0.8 - 871) Pr^(1/3)'
    write(*,'(A)') '  Valid for:  0.6 < Pr < 60, Re_crit = 5×10⁵'
    
end program flat_plate_convection


Solver Description

Evaluates external boundary layer convection over flat plates. Evaluates flow regime (Laminar vs. Turbulent) using Reynolds number ($Re_x = \rho V L / \mu$). Applies Blasius (laminar) or Schlichting (turbulent) local Nusselt number correlations to solve for average convection coefficient ($h$) and total heat rate ($Q$).

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 -ffree-line-length-none flat_plate_convection.f90 -o flat_plate_conv

Execution Command:

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

flat_plate_conv < input.txt

📥 Downloads & Local Files

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

! Plate Length ($L$) [m]
1.0
! Plate Width ($W$) [m]
0.5
! Surface Temp ($T_s$) [°C]
80.0
! Free-stream Temp ($T_\infty$) [°C]
20.0
! Velocity ($U_\infty$) [m/s]
5.0
! Fluid Density ($\rho$) [kg/m³]
1.164
! Fluid Viscosity ($\mu$) [Pa-s]
1.9e-5
! Fluid Conductivity ($k$) [W/m-K]
0.026
! Specific Heat ($C_p$) [J/kg-K]
1007.0