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

Economic Pipe Diameter Sizer

Core Numerical Engine in Fortran 90 • 33 total downloads

economic_pipe.f90
! =========================================================================
! Source File: economic_pipe.f90
! =========================================================================

program economic_pipe
    implicit none
    integer::iostat_val,i,ns,best_i
    double precision::Q,rho,mu,cp_fac,ec,hrs,eta,f_in,L,rate,life
    double precision::pi_v,D,V,Re,f_sw,dP,Pw,E_cost,C_cost,T_cost
    double precision::CRF,D_opt,V_opt,Re_opt,T_min,E_opt,C_opt
    double precision::D_mm,f_auto
    pi_v=3.14159265358979d0
    read(*,*,iostat=iostat_val) Q;read(*,*,iostat=iostat_val) rho
    read(*,*,iostat=iostat_val) mu;read(*,*,iostat=iostat_val) cp_fac
    read(*,*,iostat=iostat_val) ec;read(*,*,iostat=iostat_val) hrs
    read(*,*,iostat=iostat_val) eta;read(*,*,iostat=iostat_val) f_in
    read(*,*,iostat=iostat_val) L;read(*,*,iostat=iostat_val) rate
    read(*,*,iostat=iostat_val) life
    if(iostat_val/=0)then;write(*,*)'ERROR: Bad input.';stop;end if
    if(Q<=0)Q=0.01d0;if(rho<=0)rho=998.0d0;if(mu<=0)mu=0.001d0
    if(cp_fac<=0)cp_fac=5.0d0;if(ec<=0)ec=0.10d0;if(hrs<=0)hrs=8760.0d0
    if(eta<=0.or.eta>1)eta=0.70d0;if(L<=0)L=100.0d0
    if(rate<=0)rate=5.0d0;if(life<=0)life=20.0d0
    CRF=(rate/100.0d0)*(1.0d0+rate/100.0d0)**life/((1.0d0+rate/100.0d0)**life-1.0d0)
    write(*,'(A)')'============================================================'
    write(*,'(A)')'   ECONOMIC PIPE DIAMETER OPTIMIZER'
    write(*,'(A)')'============================================================'
    write(*,*)
    write(*,'(A)')'--- INPUTS --------------------------------------------------'
    write(*,'(A,ES10.3,A)') '  Volume Flow Q             = ',Q,' m3/s'
    write(*,'(A,F10.2,A)') '  Fluid Density rho         = ',rho,' kg/m3'
    write(*,'(A,ES10.3,A)') '  Viscosity mu              = ',mu,' Pa.s'
    write(*,'(A,F10.2,A)') '  Pipe Cost Factor          = ',cp_fac,' $/m per mm'
    write(*,'(A,F10.4,A)') '  Energy Cost               = ',ec,' $/kWh'
    write(*,'(A,F10.0,A)') '  Operating Hours           = ',hrs,' h/yr'
    write(*,'(A,F10.2)')   '  Pump Efficiency           = ',eta
    write(*,'(A,F10.2,A)') '  Pipe Length                = ',L,' m'
    write(*,'(A,F10.2,A)') '  Interest Rate             = ',rate,' percent'
    write(*,'(A,F10.0,A)') '  Lifetime                  = ',life,' years'
    write(*,'(A,F10.6)')   '  Capital Recovery Factor   = ',CRF
    write(*,*)
    T_min=1.0d30;best_i=0;D_opt=0;V_opt=0;Re_opt=0;E_opt=0;C_opt=0
    ns=50
    write(*,'(A)')'--- COST VS DIAMETER ----------------------------------------'
    write(*,'(A)')'  D[mm]   V[m/s]  Re          f       E_cost[$/yr] C_cost[$/yr] Total[$/yr]'
    write(*,'(A)')'  --------------------------------------------------------------------------'
    do i=1,ns
      D_mm=15.0d0+dble(i-1)*(500.0d0-15.0d0)/dble(ns-1)
      D=D_mm/1000.0d0
      V=4.0d0*Q/(pi_v*D**2)
      Re=rho*V*D/mu
      if(f_in>0)then;f_sw=f_in
      else
        if(Re>0)then;f_auto=0.25d0/(log10(5.74d0/Re**0.9d0))**2
          if(f_auto<0.005d0)f_auto=0.005d0;if(f_auto>0.1d0)f_auto=0.1d0
          f_sw=f_auto
        else;f_sw=0.02d0;end if
      end if
      dP=f_sw*L/D*rho*V**2/2.0d0
      Pw=Q*dP/eta
      E_cost=Pw*hrs*ec/1000.0d0
      C_cost=cp_fac*D_mm*L*CRF
      T_cost=E_cost+C_cost
      if(T_cost<T_min)then;T_min=T_cost;best_i=i;D_opt=D_mm;V_opt=V;Re_opt=Re
        E_opt=E_cost;C_opt=C_cost;end if
      write(*,'(F7.1,2X,F6.2,2X,ES10.3,2X,F7.5,2X,F10.2,4X,F10.2,4X,F10.2)') &
        D_mm,V,Re,f_sw,E_cost,C_cost,T_cost
    end do
    write(*,*)
    write(*,'(A)')'--- OPTIMAL RESULT ------------------------------------------'
    write(*,'(A,F10.1,A)') '  Optimal Diameter D_opt    = ',D_opt,' mm'
    write(*,'(A,F10.3,A)') '  Optimal Velocity V_opt    = ',V_opt,' m/s'
    write(*,'(A,ES12.3)')  '  Reynolds at D_opt         = ',Re_opt
    write(*,'(A,F10.2,A)') '  Annual Energy Cost        = ',E_opt,' $/yr'
    write(*,'(A,F10.2,A)') '  Annual Capital Cost       = ',C_opt,' $/yr'
    write(*,'(A,F10.2,A)') '  Min Total Annual Cost     = ',T_min,' $/yr'
    write(*,*)
    write(*,'(A)')'--- CORRELATIONS USED ---------------------------------------'
    write(*,'(A)')'  Swamee-Jain: f = 0.25/[log10(5.74/Re^0.9)]^2'
    write(*,'(A)')'  E_cost = (Q*dP/eta)*hours*price/1000'
    write(*,'(A)')'  C_cost = cost_per_mm*D*L*CRF'
    write(*,'(A)')'  CRF = i(1+i)^n / ((1+i)^n - 1)'
end program economic_pipe


Solver Description

Optimizes the pipe size by evaluating capital costs against pumping energy costs over the pipeline lifetime to identify the diameter with the lowest total lifecycle cost.

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 economic_pipe.f90 -o economic_pipe

Execution Command:

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

economic_pipe < input.txt

📥 Downloads & Local Files

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

! Flow rate Q [m3/s]
0.01
! Fluid density [kg/m3]
998.0
! Dynamic viscosity [Pa-s]
0.001
! Pipe capital cost factor [$/m per mm diameter]
0.50
! Electricity cost [$/kWh]
0.10
! Operating hours per year
8760.0
! Pumping efficiency [0-1]
0.70
! Friction factor (0=auto-calculate)
0.0
! Pipe length [m]
100.0
! Interest rate [%]
5.0
! System lifetime [years]
20.0