4.14.3.6. Example: Athermal, gas phase, reversible reaction with UDF

\[A(g) ↔ R(g)\]
Notes:
  • Species database names and alias are defined on the same line.

  • The fluid cell index (IJK) is passed as an argument.

  • Global field variables are referenced (RO_g, X_g, T_g, and EP_g )

mfix.dat:

NMAX_g = 2                     ! No. of gas phase species
Species_g(1) = "A" "R"         ! Database names
Species_Alias_g(1) = "A" "R"   ! Species Aliases

@(RXNS)                        !  Begin reaction block
fwd_AtoR {                     !  Reaction 1 construct
    chem_eq = "A --> R"        !  Chemical Reaction Eq
    DH = 0.0                   !  (cal/moles-reacted)
    fracDH(0) = 1.0            !  Gas phase HoR
}                              !  End reaction 1 construct
rvs_AtoR {                     !  Reaction 2 construct
    chem_eq = "R --> A"        !  Chemical Reaction Eq
    DH = 0.0                   !  (cal/moles-reacted)
    fracDH(0) = 1.0            !  Gas phase HoR
}                              !  End reaction 2 construct
@(END)                         !  End reaction block

usr_rates.f:

SUBROUTINE USR_RATES(IJK, RATES)

INCLUDE 'species.inc'

INTEGER, INTENT(IN) :: IJK
DOUBLE PRECISION, DIMENSION(NO_OF_RXNS), INTENT(OUT) :: RATES


! Fluid Cell Index
DOUBLE PRECISION c_A ! species A concentration (mol/cm^3)
DOUBLE PRECISION c_R ! species R concentration (mol/cm^3)

! Calculate species concentrations:
c_A = (RO_g(IJK) * X_g(IJK,A))/MW_g(A)
c_R = (RO_g(IJK) * X_g(IJK,R))/MW_g(R)

! Forward Reaction: A --> R (reacted moles/sec.cm^3)
!-------------------------------------------------------//
RATES(fwd_AtoR) = 1.2d17 * exp(-5.837d3/T_g(IJK)) * &
EP_g(IJK) * c_A

! Reverse Reaction: R --> A (reacted moles/sec.cm^3)
!-------------------------------------------------------//
RATES(rvs_AtoR) = 2.5d41 * exp(-1.4897d4/T_g(IJK)) * &
EP_g(IJK) * c_R

END SUBROUTINE USR_RATES