# Equil

Equil is a program for the calculation of equilibrium composition. There are different methods for calculating the equilibrium composition of a reacting mixture. For a system that consists of $N$ species and $K$ elements ($N > K$), the elements are conserved, and the classical approach involves the solution of $N+K$ non-linear equations. This approach calculates the moles of different species ($N$ numbers) at equilibrium and $K$ number of Lagrangian multipliers. An alternate method solves $N-K$ non-linear equations involving equilibrium constants and $K$ equations describing component activities. The latter approach is adopted in this program.

Documentation for Equil.

## Installation

To install the package, use the following commands in the julia REPL

julia> using Pkg
julia> Pkg.add("Equil")

## General interfaces

Equil.equilibrateMethod

This function calculates equilibrium composition based on initial conditions read from an input filter

Usage

equilibrate(input_file::AbstractString, lib_dir::AbstractString)
• input_file ; input xml file, which specifies T, p, species list, molefracs
• lib_dir : the folder in which therm.dat file exists

Alternatively the same be calculated based on user input, wherein the species composition is passed as a Dictionary

Usage

equilibrate(T::Float64, p::Float64, species_comp::Dict{String, Float64}, thermo_obj)
• T : Temperature in K
• p : Pressure in Pa
• thermoobj : Thermodynamic object created using IdealGas.createthermo
• species_comp : Dictionary of species composition {String, Float64}

Alternatively the same be calculated based on user input where in the species list and molefractions are passed in as separate arrays

Usage

equilibrate(T, p, thermo_obj, mole_fracs, gasphase)
• T : Temperature in K
• p : Pressure in Pa
• thermoobj : Thermodynamic object created using IdealGas.createthermo
• mole_fracs : species mole fractions
• gasphase : list of gasphase species

## Executing the code

In order to calculate the equilibrium composition based on input file, do the following. On the Julia REPL

julia>using Equil
julia>equil("equil.xml","../lib/")

## Input file

The method takes file_path as the argument. The file_path points to the input XML file. The structure of the XML input file is shown below.

<?xml version="1.0" encoding="ISO-8859-1"?>
<equil>
<gasphase>CH4 H2 CO CO2 H2O O2 N2 </gasphase>
<molefractions>CH4=0.6, H2O=0.1, CO2=0.2, N2=0.1</molefractions>
<T>1073.15</T>
<p>1e5</p>
</equil>

The meaning of different tags is specified below.

• <equil> : The root XML tag for equilibrate
• <gasphase> : list of gas-phase species. The species names must be separated by white spaces or tab
• <molefractions> : Initial mole fraction of the gas-phase species. Instead of mole fractions, mass fractions may also be specified. In that case, the tag must be <massfractions>. You must ensure that the sum of mass or mole fractions specified is unity. There are no internal checks to ascertain this.
• <T>: operating temperature in K
• <p>: initial pressure in Pa

## Output

The code generates only screen output. An example output is shown below.

Inititial condition:

Species 	 moles 		 molefraction
CH4 	 6.7244e+00 	 6.0000e-01
H2 	 0.0000e+00 	 0.0000e+00
CO 	 0.0000e+00 	 0.0000e+00
CO2 	 2.2415e+00 	 2.0000e-01
H2O 	 1.1207e+00 	 1.0000e-01
O2 	 0.0000e+00 	 0.0000e+00
N2 	 1.1207e+00 	 1.0000e-01

Equilibrium composition @ T= 1073.15 K and p=100000.0 Pa

Species          moles           molefraction
CH4       3.3912e+00      1.8973e-01
CO2       1.2649e-02      7.0766e-04
H2O       1.6324e-02      9.1329e-04
CO       5.5621e+00      3.1118e-01
O2       3.2984e-23      1.8454e-24
H2       7.7709e+00      4.3476e-01
N2       1.1207e+00      6.2703e-02

In certain cases, you may want to calculate the equilibrum composition from within another program. For such cases Equil package provides another interface equilibrate

julia>using Equil
julia>using IdealGas
julia>gasphase = ["CH4","H2", "CO", "CO2", "H2O", "O2" ,"N2"]
julia>mole_fracs = [0.6, 0.0, 0.0, 0.2, 0.1, 0.0, 0.1]
julia>thermo_file = get_path(lib_dir, "therm.dat")
julia>thermo_obj = create_thermo(gasphase, thermo_file)
julia>T = 1073.15
julia>p = 1e5
julia>gasphase_in, moles_all, eq_molefracs  = equilibrate(T,p, thermo_obj, mole_fracs, gasphase)        

Instead of passing the species list and the mole fractions separately, you may pass a Dictionary of species names and the molefractions a described below.

julia>using IdealGas
julia>using Equil
julia>species_comp = Dict("CH4"=>0.6,"H2"=>0.0, "CO"=>0.0, "CO2"=>0.2, "H2O"=>0.1, "O2"=>0.0 ,"N2"=>0.1)
julia>thermo_file = get_path(lib_dir, "therm.dat")
julia>thermo_obj = create_thermo(collect(keys(species_comp)), thermo_file)
julia>T = 1073.15
julia>p = 1e5
julia>gasphase_in, moles_all, eq_molefracs  = equilibrate(T,p, thermo_obj, species_comp)