💻 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.
Semi-Infinite Solid Conduction
Core Numerical Engine in Fortran 90 • 52 total downloads
! =========================================================================
! Source File: semi_infinite_solid.f90
! =========================================================================
program semi_infinite_solid
implicit none
! Input variables
integer :: bc_type
real(8) :: T_i, bc_param1, bc_param2, k, alpha, x, t
! Calculation variables
real(8) :: T_xt, T_0t, q_0t, Q_t, delta_p
real(8) :: pi, arg, arg1, arg2, arg3
real(8) :: T_s, q_s, h, T_inf
real(8) :: x_probe, T_probe, arg_p, arg3_p
integer :: i
pi = 3.141592653589793d0
! Read inputs
read(*,*) bc_type
read(*,*) T_i
read(*,*) bc_param1
read(*,*) bc_param2
read(*,*) k
read(*,*) alpha
read(*,*) x
read(*,*) t
! Input safety checks
if (alpha <= 0.0d0) alpha = 1.0d-7
if (k <= 0.0d0) k = 1.0d0
if (t <= 0.0d0) t = 1.0d-5
if (x < 0.0d0) x = 0.0d0
delta_p = 4.0d0 * sqrt(alpha * t)
if (bc_type == 1) then
! Constant Surface Temperature
T_s = bc_param1
arg = x / (2.0d0 * sqrt(alpha * t))
T_xt = T_s + (T_i - T_s) * erf(arg)
T_0t = T_s
q_0t = k * (T_s - T_i) / sqrt(pi * alpha * t)
Q_t = 2.0d0 * k * (T_s - T_i) * sqrt(t / (pi * alpha))
else if (bc_type == 2) then
! Constant Surface Heat Flux
q_s = bc_param1
arg = x / (2.0d0 * sqrt(alpha * t))
T_xt = T_i + (2.0d0 * q_s * sqrt(alpha * t / pi) / k) * exp(-arg**2) - (q_s * x / k) * erfc(arg)
T_0t = T_i + (2.0d0 * q_s / k) * sqrt(alpha * t / pi)
q_0t = q_s
Q_t = q_s * t
else if (bc_type == 3) then
! Surface Convection
h = bc_param1
T_inf = bc_param2
arg1 = x / (2.0d0 * sqrt(alpha * t))
arg2 = h * sqrt(alpha * t) / k
arg3 = h * x / k + (h**2 * alpha * t) / (k**2)
T_xt = T_i + (T_inf - T_i) * (erfc(arg1) - exp(arg3) * erfc(arg1 + arg2))
T_0t = T_i + (T_inf - T_i) * (1.0d0 - exp(arg2**2) * erfc(arg2))
q_0t = h * (T_inf - T_0t)
Q_t = (T_inf - T_i) * (k**2 / (h * alpha)) * (exp(arg2**2) * erfc(arg2) - 1.0d0 + 2.0d0 * arg2 / sqrt(pi))
else
! Default fallback
bc_type = 1
T_s = T_i
T_xt = T_i
T_0t = T_i
q_0t = 0.0d0
Q_t = 0.0d0
end if
! Print output report
write(*,*) "=================================================="
write(*,*) " SEMI-INFINITE SOLID CONDUCTION REPORT"
write(*,*) "=================================================="
write(*,*) ""
write(*,*) "THERMO-PHYSICAL PROPERTIES:"
write(*,*) "--------------------------------------------------"
write(*, '(A, F10.4, A)') " Conductivity (k): ", k, " W/m.K"
write(*, '(A, E12.4, A)') " Diffusivity (alpha): ", alpha, " m2/s"
write(*, '(A, F10.2, A)') " Initial Temp (T_i): ", T_i, " C"
write(*,*) ""
write(*,*) "BOUNDARY CONDITIONS:"
write(*,*) "--------------------------------------------------"
if (bc_type == 1) then
write(*,*) " Type: Constant Surface Temperature (T_s)"
write(*, '(A, F10.2, A)') " Surface Temp (T_s): ", T_s, " C"
else if (bc_type == 2) then
write(*,*) " Type: Constant Surface Heat Flux (q''s)"
write(*, '(A, F10.2, A)') " Heat Flux (q''s): ", q_s, " W/m2"
else if (bc_type == 3) then
write(*,*) " Type: Surface Convection (h, T_inf)"
write(*, '(A, F10.2, A)') " Convection Coeff (h): ", h, " W/m2.K"
write(*, '(A, F10.2, A)') " Ambient Temp (T_inf): ", T_inf, " C"
end if
write(*,*) ""
write(*,*) "TRANSIENT SIMULATION INPUTS:"
write(*,*) "--------------------------------------------------"
write(*, '(A, F10.4, A)') " Target Depth (x): ", x, " m"
write(*, '(A, F10.2, A)') " Target Time (t): ", t, " s"
write(*,*) ""
write(*,*) "CALCULATED TRANSIENT METRICS:"
write(*,*) "--------------------------------------------------"
write(*, '(A, F10.4, A)') " Penetration Depth (delta):", delta_p, " m"
write(*, '(A, F10.2, A)') " Surface Temp T(0, t): ", T_0t, " C"
write(*, '(A, F14.2, A)') " Surface Heat Flux q''(0,t):", q_0t, " W/m2"
write(*, '(A, ES14.4, A)') " Cumulative Heat Trans (Q):", Q_t, " J/m2"
write(*, '(A, F10.2, A)') " Temp at x,t T(x, t): ", T_xt, " C"
write(*,*) ""
write(*,*) "TEMPERATURE PROFILE TABLE T(x,t) at t =", t, "s"
write(*,*) "--------------------------------------------------"
write(*,*) " Depth (mm) Depth (m) Temp (C)"
write(*,*) "--------------------------------------------------"
do i = 0, 10
x_probe = (dble(i) / 10.0d0) * max(x, delta_p)
if (bc_type == 1) then
arg_p = x_probe / (2.0d0 * sqrt(alpha * t))
T_probe = T_s + (T_i - T_s) * erf(arg_p)
else if (bc_type == 2) then
arg_p = x_probe / (2.0d0 * sqrt(alpha * t))
T_probe = T_i + (2.0d0 * q_s * sqrt(alpha * t / pi) / k) * exp(-arg_p**2) - (q_s * x_probe / k) * erfc(arg_p)
else if (bc_type == 3) then
arg_p = x_probe / (2.0d0 * sqrt(alpha * t))
arg3_p = h * x_probe / k + (h**2 * alpha * t) / (k**2)
T_probe = T_i + (T_inf - T_i) * (erfc(arg_p) - exp(arg3_p) * erfc(arg_p + arg2))
end if
write(*, '(f12.3, f15.4, f15.2)') x_probe * 1000.0d0, x_probe, T_probe
end do
write(*,*) "=================================================="
end program semi_infinite_solid
Solver Description
Calculate transient heat conduction and temperature distributions in semi-infinite solids under constant temperature, heat flux, or convection boundary 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:
Execution Command:
Execute the program by feeding the sample input file into the program using stdin redirection:
📥 Downloads & Local Files
Preview of the required input file (input.txt):
1
! Initial temperature Ti [°C]
20.0
! Boundary parameter (Ts [°C] or qs [W/m2] or h [W/m2-K])
100.0
! Boundary fluid temperature [°C]
0.0
! Thermal conductivity k [W/m-K]
1.0
! Thermal diffusivity alpha [m2/s]
5e-7
! Position x [m]
0.05
! Time t [s]
3600.0