💻 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.
Gas Mixture Properties
Core Numerical Engine in Fortran 90 • 31 total downloads
! =========================================================================
! Source File: gas_mixture.f90
! =========================================================================
program gas_mixture
implicit none
integer::nsp,iostat_val,i,j,ns
double precision::y(10),MW(10),Cp(10),mu(10),kk(10)
double precision::y_sum,Mmix,Cp_mol,Cp_mass,mu_mix,k_mix
double precision::phi_ij,num,den,R_mix,gamma_mix,rho_STP
double precision::R_gas,y1_sw,mu_sw,k_sw,y_tmp(10)
R_gas=8.314462d0
read(*,*,iostat=iostat_val) nsp
if(iostat_val/=0.or.nsp<2)then;write(*,*)'ERROR: Bad input.';stop;end if
if(nsp>10)nsp=10
do i=1,nsp
read(*,*,iostat=iostat_val) y(i),MW(i),Cp(i),mu(i),kk(i)
if(iostat_val/=0)then;write(*,*)'ERROR: Bad input line',i;stop;end if
end do
y_sum=0.0d0;do i=1,nsp;y_sum=y_sum+y(i);end do
if(y_sum>0)then;do i=1,nsp;y(i)=y(i)/y_sum;end do;end if
Mmix=0;Cp_mol=0
do i=1,nsp;Mmix=Mmix+y(i)*MW(i);Cp_mol=Cp_mol+y(i)*Cp(i);end do
Cp_mass=Cp_mol/Mmix*1000.0d0
R_mix=R_gas/Mmix*1000.0d0
gamma_mix=Cp_mass/(Cp_mass-R_mix)
rho_STP=101325.0d0*Mmix/(R_gas*273.15d0*1000.0d0)
mu_mix=0;k_mix=0
do i=1,nsp
num=y(i)*mu(i); den=0
do j=1,nsp
phi_ij=(1.0d0+sqrt(mu(i)/mu(j))*(MW(j)/MW(i))**0.25d0)**2 &
/sqrt(8.0d0*(1.0d0+MW(i)/MW(j)))
den=den+y(j)*phi_ij
end do
mu_mix=mu_mix+num/max(den,1.0d-30)
end do
do i=1,nsp
num=y(i)*kk(i); den=0
do j=1,nsp
phi_ij=(1.0d0+sqrt(mu(i)/mu(j))*(MW(j)/MW(i))**0.25d0)**2 &
/sqrt(8.0d0*(1.0d0+MW(i)/MW(j)))
den=den+y(j)*phi_ij
end do
k_mix=k_mix+num/max(den,1.0d-30)
end do
write(*,'(A)')'============================================================'
write(*,'(A)')' GAS MIXTURE PROPERTIES (Wilke / Wassilijewa)'
write(*,'(A)')'============================================================'
write(*,*)
write(*,'(A)')'--- INPUTS --------------------------------------------------'
write(*,'(A,I4)') ' Number of Species = ',nsp
write(*,'(A)')' # y_i MW Cp[J/molK] mu[uPa.s] k[W/mK]'
write(*,'(A)')' -----------------------------------------------------------'
do i=1,nsp
write(*,'(I4,2X,F8.4,2X,F8.2,4X,F8.2,4X,F8.2,4X,F8.4)') i,y(i),MW(i),Cp(i),mu(i),kk(i)
end do
write(*,*)
write(*,'(A)')'--- MIXTURE PROPERTIES --------------------------------------'
write(*,'(A,F12.4,A)') ' Molar Mass M_mix = ',Mmix,' g/mol'
write(*,'(A,F12.4,A)') ' Cp_mix (molar) = ',Cp_mol,' J/(mol.K)'
write(*,'(A,F12.2,A)') ' Cp_mix (mass) = ',Cp_mass,' J/(kg.K)'
write(*,'(A,F12.4,A)') ' Viscosity mu_mix = ',mu_mix,' uPa.s'
write(*,'(A,F12.6,A)') ' Conductivity k_mix = ',k_mix,' W/(m.K)'
write(*,'(A,F12.4,A)') ' Gas Constant R_mix = ',R_mix,' J/(kg.K)'
write(*,'(A,F12.4)') ' Gamma (Cp/Cv) approx = ',gamma_mix
write(*,'(A,F12.4,A)') ' Density at STP = ',rho_STP,' kg/m3'
write(*,*)
ns=20
write(*,'(A)')'--- SWEEP: y(1) VARIATION -----------------------------------'
write(*,'(A)')' y(1) mu_mix k_mix'
write(*,'(A)')' -----------------------------------------------------------'
do i=1,ns
y1_sw=dble(i-1)/dble(ns-1)
y_tmp=0;y_tmp(1)=y1_sw
if(nsp>1)then
den=0;do j=2,nsp;den=den+y(j);end do
if(den>0)then;do j=2,nsp;y_tmp(j)=(1.0d0-y1_sw)*y(j)/den;end do
else;y_tmp(2)=1.0d0-y1_sw;end if
end if
mu_sw=0;k_sw=0
do j=1,nsp
num=y_tmp(j)*mu(j);den=0
do ns=1,nsp
phi_ij=(1.0d0+sqrt(mu(j)/mu(ns))*(MW(ns)/MW(j))**0.25d0)**2 &
/sqrt(8.0d0*(1.0d0+MW(j)/MW(ns)))
den=den+y_tmp(ns)*phi_ij
end do
mu_sw=mu_sw+num/max(den,1.0d-30)
end do
do j=1,nsp
num=y_tmp(j)*kk(j);den=0
do ns=1,nsp
phi_ij=(1.0d0+sqrt(mu(j)/mu(ns))*(MW(ns)/MW(j))**0.25d0)**2 &
/sqrt(8.0d0*(1.0d0+MW(j)/MW(ns)))
den=den+y_tmp(ns)*phi_ij
end do
k_sw=k_sw+num/max(den,1.0d-30)
end do
write(*,'(F8.4,4X,F10.4,4X,F10.6)') y1_sw,mu_sw,k_sw
end do
write(*,*)
write(*,'(A)')'--- CORRELATIONS USED ---------------------------------------'
write(*,'(A)')' Wilke (1950): mu_mix = sum(yi*mui / sum(yj*phi_ij))'
write(*,'(A)')' Wassilijewa (1904): k_mix same form with conductivity.'
write(*,'(A)')' phi_ij = [1+sqrt(mui/muj)*(Mj/Mi)^0.25]^2 / sqrt(8(1+Mi/Mj))'
end program gas_mixture
Solver Description
Computes collective ideal gas mixture properties (molecular weight, specific heats, viscosity, conductivity) using Wilke's method and Wassilijewa mixing rules.
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):
2
! Species 1 mole fraction
0.79
! Species 1 molar mass [g/mol]
28.01
! Species 1 molar heat capacity Cp [J/mol-K]
29.1
! Species 1 dynamic viscosity [uPa-s]
17.8
! Species 1 thermal conductivity [W/m-K]
0.0260
! (Repeat inputs sequentially for each species)
0.21
! Parameter 8
32.00
! Parameter 9
29.4
! Parameter 10
20.6
! Parameter 11
0.0267