💻 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.

Composite Wall Conduction with Convection

Core Numerical Engine in Fortran 90 • 38 total downloads

composite_wall_convection.f90
! =========================================================================
! Source File: composite_wall_convection.f90
! =========================================================================

program composite_wall_convection
    implicit none

    ! Parameters
    real, parameter :: sigma = 5.67037e-8  ! Stefan-Boltzmann constant, W/(m^2 K^4)

    ! Inputs
    real :: Th, Tc          ! Inside and outside fluid temperatures, C
    real :: hi, ho          ! Inside and outside convection coefficients, W/(m^2 K)
    integer :: use_rad      ! 0 = No radiation, 1 = Yes radiation
    real :: eps_i, eps_o    ! Inside and outside surface emissivities
    real :: A               ! Wall area, m^2
    integer :: N            ! Number of layers
    real, allocatable :: L(:), k(:), R(:) ! Thickness (mm), conductivity (W/m-K), resistance (m^2-K/W)
    real :: RH_in           ! Inside room relative humidity, %

    ! Solved variables
    real :: L_m             ! Layer thickness in meters
    real :: R_wall          ! Total conduction resistance of the wall
    real :: R_si, R_se      ! Effective surface resistances
    real :: R_total         ! Overall thermal resistance, m^2 K/W
    real :: U               ! Overall heat transfer coefficient, W/m^2 K
    real :: q               ! Heat flux, W/m^2
    real :: Q_total         ! Total heat transfer rate, W
    real :: T_si, T_so      ! Inner and outer surface temperatures, C
    real, allocatable :: T_node(:) ! Node temperatures at interfaces
    real :: Tdew            ! Dew point temperature, C
    
    ! Iterative variables
    real :: Tsi_K, Tso_K, Th_K, Tc_K
    real :: hr_i, hr_o
    real :: T_si_old, T_so_old
    integer :: iter
    logical :: converged
    
    ! UI display arrays
    real, allocatable :: R_pct(:) ! Percentage resistance contribution
    
    ! Loop variables
    integer :: i
    real :: alpha_val

    ! 1. Read Inputs from stdin
    read(*,*) Th
    read(*,*) Tc
    read(*,*) hi
    read(*,*) ho
    read(*,*) use_rad
    if (use_rad == 1) then
        read(*,*) eps_i
        read(*,*) eps_o
    else
        eps_i = 0.0
        eps_o = 0.0
    end if
    read(*,*) A
    read(*,*) N

    allocate(L(N))
    allocate(k(N))
    allocate(R(N))
    allocate(R_pct(N))
    allocate(T_node(N+1))

    do i = 1, N
        read(*,*) L(i)
        read(*,*) k(i)
    end do
    read(*,*) RH_in

    ! 2. Compute Wall Conduction Resistances
    R_wall = 0.0
    do i = 1, N
        L_m = L(i) / 1000.0  ! convert mm to meters
        R(i) = L_m / k(i)
        R_wall = R_wall + R(i)
    end do

    ! 3. Iterative solver for Surface Temperatures (to resolve radiation non-linearity)
    T_si = Th - 0.1 * (Th - Tc)
    T_so = Tc + 0.1 * (Th - Tc)
    
    iter = 0
    converged = .false.
    do while (.not. converged .and. iter < 100)
        iter = iter + 1
        T_si_old = T_si
        T_so_old = T_so
        
        if (use_rad == 1) then
            ! Radiation requires temperatures in Kelvin
            Th_K = Th + 273.15
            Tc_K = Tc + 273.15
            Tsi_K = T_si + 273.15
            Tso_K = T_so + 273.15
            
            hr_i = eps_i * sigma * (Th_K + Tsi_K) * (Th_K**2 + Tsi_K**2)
            hr_o = eps_o * sigma * (Tso_K + Tc_K) * (Tso_K**2 + Tc_K**2)
        else
            hr_i = 0.0
            hr_o = 0.0
        end if
        
        R_si = 1.0 / (hi + hr_i)
        R_se = 1.0 / (ho + hr_o)
        
        R_total = R_si + R_wall + R_se
        q = (Th - Tc) / R_total
        
        T_si = Th - q * R_si
        T_so = Tc + q * R_se
        
        if (abs(T_si - T_si_old) < 1e-5 .and. abs(T_so - T_so_old) < 1e-5) then
            converged = .true.
        end if
    end do

    U = 1.0 / R_total
    Q_total = q * A

    ! 4. Compute Interface Temperatures
    T_node(1) = T_si
    do i = 1, N
        T_node(i+1) = T_node(i) - q * (L(i) / 1000.0) / k(i)
    end do

    ! Calculate percentage resistance of each component
    do i = 1, N
        R_pct(i) = (R(i) / R_total) * 100.0
    end do

    ! 5. Dew Point Calculation (Magnus-Tetens)
    alpha_val = (17.625 * Th) / (243.04 + Th) + log(RH_in / 100.0)
    Tdew = (243.04 * alpha_val) / (17.625 - alpha_val)

    ! 6. Output Engineering Report
    write(*,*) "=========================================================================="
    write(*,*) "         COMPOSITE WALL THERMAL ANALYSIS REPORT (CONVECTION & RAD)        "
    write(*,*) "=========================================================================="
    write(*, '(A, F7.2, A, F7.2, A)') " Boundary Temperatures:  Inside = ", Th, " C, Outside = ", Tc, " C"
    write(*, '(A, F7.2, A, F7.2, A)') " Convection Coeffs:      Inside = ", hi, " W/m2-K, Outside = ", ho, " W/m2-K"
    if (use_rad == 1) then
        write(*, '(A, F5.3, A, F5.3)') " Surface Emissivities:   Inside = ", eps_i, ", Outside = ", eps_o
        write(*, '(A, F7.3, A, F7.3, A)') " Radiative Coeffs (hr):  Inside = ", hr_i, ", Outside = ", hr_o, " W/m2-K"
    else
        write(*,*) " Surface Radiation:      Disabled"
    end if
    write(*, '(A, F8.2, A)') " Wall Surface Area:     ", A, " m2"
    write(*, '(A, I3)') " Number of Wall Layers:  ", N

    write(*,*) "--------------------------------------------------------------------------"
    write(*,*) " LAYER RESISTANCE & PROPERTIES"
    write(*,*) "--------------------------------------------------------------------------"
    write(*,*) " Layer  Thick(mm)  Conductivity(W/m-K)  Resistance(m2-K/W)  Resistance %"
    do i = 1, N
        write(*, '(I4.2, F12.1, F21.3, F20.4, F13.1, A)') &
            i, L(i), k(i), R(i), R_pct(i), " %"
    end do
    write(*, '(A, F20.4, F13.1, A)') " Inside Surface Resistance (R_si):   ", R_si, (R_si / R_total * 100.0), " %"
    write(*, '(A, F20.4, F13.1, A)') " Outside Surface Resistance (R_se):  ", R_se, (R_se / R_total * 100.0), " %"

    write(*,*) "--------------------------------------------------------------------------"
    write(*,*) " THERMAL PERFORMANCE METRICS"
    write(*,*) "--------------------------------------------------------------------------"
    write(*, '(A, F10.5, A)') " Total Thermal Resistance (R_total):   ", R_total, " m2-K/W"
    write(*, '(A, F10.5, A)') " Overall Heat Transfer Coeff (U):       ", U, " W/m2-K"
    write(*, '(A, F10.2, A)') " Heat Flux (q):                         ", q, " W/m2"
    write(*, '(A, F10.2, A)') " Total Heat Loss/Gain (Q):              ", Q_total, " W"

    write(*,*) "--------------------------------------------------------------------------"
    write(*,*) " INTERFACE TEMPERATURE PROFILE"
    write(*,*) "--------------------------------------------------------------------------"
    write(*, '(A, F7.2, A)') " Inner Surface Temp (T_si):           ", T_si, " C"
    do i = 1, N
        write(*, '(A, I2, A, I2, A, F7.2, A)') " Interface ", i, " Temp (T_", i, "):             ", T_node(i+1), " C"
    end do
    write(*, '(A, F7.2, A)') " Outer Surface Temp (T_so):           ", T_so, " C"

    write(*,*) "--------------------------------------------------------------------------"
    write(*,*) " CONDENSATION RISK ANALYSIS"
    write(*,*) "--------------------------------------------------------------------------"
    write(*, '(A, F5.1, A, F7.2, A)') " Inside Air RH: ", RH_in, " %, Dew Point (Tdew): ", Tdew, " C"
    write(*, '(A, F7.2, A)') " Inner Surface Temperature (T_si):    ", T_si, " C"
    if (T_si <= Tdew) then
        write(*,*) " WARNING: Surface temperature is below dew point! Condensation risk."
    else
        write(*,*) " Status: Surface temperature is safe. No condensation risk."
    end if
    write(*,*) "=========================================================================="

    deallocate(L)
    deallocate(k)
    deallocate(R)
    deallocate(R_pct)
    deallocate(T_node)
end program composite_wall_convection


Solver Description

Calculate overall U-value, thermal resistance, heat transfer, temperature profiles, and surface condensation risks for composite walls with convection and radiation.

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 composite_wall_convection.f90 -o composite_wall_convection_calc

Execution Command:

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

composite_wall_convection_calc < input.txt

📥 Downloads & Local Files

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

! Inner air temperature [°C]
20.0
! Outer air temperature [°C]
-10.0
! Inner convection coefficient hi [W/m2-K]
10.0
! Outer convection coefficient ho [W/m2-K]
25.0
! Use radiation flag (0=No, 1=Yes)
0
! Wall area [m2]
10.0
! Number of layers
2
! Layer 1 thickness [m]
0.1
! Layer 1 thermal conductivity [W/m-K]
1.7
! Layer 2 thickness [m]
0.05
! Layer 2 thermal conductivity [W/m-K]
0.03
! Inner relative humidity RH_in [%]
50.0