4.13.3.7. Example: Char combustion with UDF

\[\text{C}(s) + 0.5\text{O}_2 (g) → \text{CO}(g)\]

Notes:

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

  • Algebraic expressions for the rate limiting steps are omitted for brevity.

###mfix.dat: see step 3.
###usr_rates.f:
SUBROUTINE USR_RATES(IJK, RATES)
DOUBLE PRECISION, INTENT(IN) :: IJK
! Fluid Cell Index
DOUBLE PRECISION, INTENT(OUT) :: RATES(:) ! Reaction Rates
⋮
! Rate limiting steps:
DOUBLE PRECISION k_f ! film diffusion (cm/sec)
DOUBLE PRECISION k_a ! ash layer diffusions (cm/sec)
DOUBLE PRECISION k_s ! chemical kinetics (cm/sec)
DOUBLE PRECISION k_eff ! effective rate (cm/sec)

! Total surface area of solids phase 1 in IJK
DOUBLE PRECISION Sa ! (cm^2/cm^3)

! C + 0.5O2 --> CO (reacted moles/sec.cm^3)
!-------------------------------------------------------//
! Verify that solids are present
IF(.NOT.COMPARE(EP_g(IJK),ONE)) THEN
  ! Calculate film diffusion rate
  k_f = < film diffusion rate expression >
  ! (cm/sec)
  ! Calculate ash diffusion rate
  k_a = < ash diffusion rate expression >
  ! (cm/sec)
  ! Calculate kinetic rate
  k_s = < kinetic rate expression >
  ! (cm/sec)
  ! Effective rate (cm/sec)
  k_eff = ONE/(ONE/k_a + ONE/k_f + ONE/k_s)
  ! Calculate total surface area of solids phase 1
  Sa = 6.0 * EP_s(IJK,1) / D_p0(1)
  ! Calculate the reaction rate.
  RATES(Char_Combustion) = 2.0 *(Sa * k_eff * Conc(O2))
ELSE
  ! No solids --> No reaction
  RATES(Char_Combustion) = ZERO
ENDIF

END SUBROUTINE USR_RATES

See legacy_tutorials/SpoutedBedCombustor for details on a similar simulation setup.