💻 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.
Specific Speed & Cordier Diagram
Core Numerical Engine in Fortran 90 • 27 total downloads
! =========================================================================
! Source File: specific_speed.f90
! =========================================================================
program specific_speed
implicit none
integer::mtype,iostat_val,i,n_pts
double precision::Q,H,N,D,omega,Ns,Ds,Ns_US,eta_cord,Ds_cord,D_cord
double precision::g,rho_air,H_m,N_sw,Ns_sw,pi_v
character(len=40)::mname,regime
pi_v=3.14159265358979d0;g=9.81d0;rho_air=1.2d0
read(*,*,iostat=iostat_val) mtype;read(*,*,iostat=iostat_val) Q
read(*,*,iostat=iostat_val) H;read(*,*,iostat=iostat_val) N
read(*,*,iostat=iostat_val) D
if(iostat_val/=0)then;write(*,*)'ERROR: Bad input.';stop;end if
if(Q<=0)Q=0.1d0;if(H<=0)H=10.0d0;if(N<=0)N=1450.0d0
select case(mtype)
case(1);mname='Centrifugal Pump';H_m=H
case(2);mname='Axial Pump';H_m=H
case(3);mname='Centrifugal Fan';H_m=H/(rho_air*g)
case(4);mname='Axial Fan';H_m=H/(rho_air*g)
case(5);mname='Radial Turbine';H_m=H
case default;mname='Axial Turbine';H_m=H;mtype=6
end select
omega=N*2.0d0*pi_v/60.0d0
Ns=omega*sqrt(Q)/(g*H_m)**0.75d0
Ns_US=Ns*2733.0d0
if(D>0)then
Ds=D*(g*H_m)**0.25d0/sqrt(Q)
else
Ds_cord=exp(1.25d0-0.40d0*log(max(Ns,0.01d0)))
Ds=Ds_cord
D_cord=Ds*sqrt(Q)/(g*H_m)**0.25d0
D=D_cord
end if
Ds_cord=exp(1.25d0-0.40d0*log(max(Ns,0.01d0)))
eta_cord=0.90d0-0.08d0*(log(Ns)-log(1.0d0))**2
if(eta_cord<0.40d0)eta_cord=0.40d0;if(eta_cord>0.95d0)eta_cord=0.95d0
if(Ns<0.2d0)then;regime='Positive displacement'
else if(Ns<1.0d0)then;regime='Radial / Centrifugal'
else if(Ns<4.0d0)then;regime='Mixed flow'
else;regime='Axial flow';end if
write(*,'(A)')'============================================================'
write(*,'(A)')' SPECIFIC SPEED / SPECIFIC DIAMETER (Cordier)'
write(*,'(A)')'============================================================'
write(*,*)
write(*,'(A)')'--- INPUTS --------------------------------------------------'
write(*,'(A,A)') ' Machine Type = ',trim(mname)
write(*,'(A,F10.4,A)') ' Volume Flow Q = ',Q,' m3/s'
write(*,'(A,F10.2,A)') ' Head H = ',H,' m (or Pa for fans)'
write(*,'(A,F10.2,A)') ' Head (equiv) H_m = ',H_m,' m'
write(*,'(A,F10.1,A)') ' Speed N = ',N,' rpm'
write(*,'(A,F10.4,A)') ' Diameter D = ',D,' m'
write(*,*)
write(*,'(A)')'--- SPECIFIC SPEED ------------------------------------------'
write(*,'(A,F12.4)') ' Ns (dimensionless) = ',Ns
write(*,'(A,F12.1)') ' Ns (US customary) = ',Ns_US
write(*,'(A,F12.4)') ' Ds (specific diameter) = ',Ds
write(*,'(A,F12.4)') ' omega [rad/s] = ',omega
write(*,*)
write(*,'(A)')'--- CORDIER DIAGRAM -----------------------------------------'
write(*,'(A,F12.4)') ' Ds_Cordier (predicted) = ',Ds_cord
write(*,'(A,F12.4)') ' eta_Cordier (predicted) = ',eta_cord
write(*,'(A,A)') ' Flow Regime = ',trim(regime)
write(*,*)
n_pts=25
write(*,'(A)')'--- SWEEP: Ns VS SPEED N ------------------------------------'
write(*,'(A)')' N[rpm] omega Ns Ns_US Regime'
write(*,'(A)')' -----------------------------------------------------------'
do i=1,n_pts
N_sw=500.0d0+dble(i-1)*(5000.0d0-500.0d0)/dble(n_pts-1)
omega=N_sw*2.0d0*pi_v/60.0d0
Ns_sw=omega*sqrt(Q)/(g*H_m)**0.75d0
if(Ns_sw<0.2d0)then;regime='PD'
else if(Ns_sw<1.0d0)then;regime='Radial'
else if(Ns_sw<4.0d0)then;regime='Mixed'
else;regime='Axial';end if
write(*,'(F8.0,4X,F8.2,4X,F10.4,4X,F10.1,4X,A)') N_sw,omega,Ns_sw,Ns_sw*2733.0d0,trim(regime)
end do
write(*,*)
write(*,'(A)')'--- CORRELATIONS USED ---------------------------------------'
write(*,'(A)')' Ns = omega*sqrt(Q) / (g*H)^0.75'
write(*,'(A)')' Ds = D*(g*H)^0.25 / sqrt(Q)'
write(*,'(A)')' Cordier: Ds = exp(1.25 - 0.40*ln(Ns))'
end program specific_speed
Solver Description
Computes turbomachinery dimensionless specific speed ($N_s$) and specific diameter ($D_s$), plots placement on the Cordier curve, and estimates the Cordier efficiency limit.
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
! Volumetric flow rate Q [m3/s]
0.1
! Head H [m] (or pressure Pa for fans)
30.0
! Rotation speed N [rpm]
1450.0
! Machine diameter D [m] (0=estimate using Cordier correlation)
0.0