![]() |
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Description
You need to use DEFINE_HET_RXN_RATE to specify reaction rates for heterogeneous reactions. A heterogeneous reaction is one that involves reactants and products from more than one phase. Unlike DEFINE_VR_RATE, a DEFINE_HET_RXN_RATE UDF can be specified differently for different heterogeneous reactions.
During ANSYS FLUENT execution, the DEFINE_HET_RXN_RATE UDF for each heterogeneous reaction that is defined is called in every fluid cell. ANSYS FLUENT will use the reaction rate specified by the UDF to compute production/destruction of the species participating in the reaction, as well as heat and momentum transfer across phases due to the reaction.
A heterogeneous reaction is typically used to define reactions involving species of different phases. The bulk phase can participate in the reaction if the phase does not have any species (i.e. phase has fluid material instead of mixture material). Heterogeneous reactions are defined in the Phase Interaction dialog box.
Usage
DEFINE_HET_RXN_RATE( name,c,t,r,mw,yi,rr,rr_t) |
Argument Type | Description |
symbol name | UDF name. |
cell_t c | Cell index. |
Thread *t | Cell thread (mixture level) on which |
heterogeneous reaction rate is to be applied. | |
Hetero_Reaction *r | Pointer to data structure that represents |
the current heterogeneous reaction | |
(see sg_mphase.h). | |
real mw[MAX_PHASES][MAX_SPE_EQNS] | Matrix of species molecular weights. |
mw[i][j] will give molecular weight of | |
species with ID j in phase with index i. | |
For phase which has fluid material, the | |
molecular weight can be accessed as | |
mw[i][0]. | |
real yi[MAX_PHASES][MAX_SPE_EQNS] | Matrix of species mass fractions. |
yi[i][j] will give mass fraction of | |
species with ID j in phase with index i. | |
For phase which has fluid material, | |
yi[i][0] will be 1. | |
real *rr | Pointer to laminar reaction rate. |
real *rr_t | Currently not used. Provided for future use. |
Function returns | |
void | |
There are eight arguments to
DEFINE_HET_RXN_RATE:
name,
c,
t,
r,
mw,
yi,
rr, and
rr_t. You supply
name, the name of the UDF.
c,
t,
r,
mw,
yi,
rr, and
rr_t are variables that are passed by the
ANSYS FLUENT solver to your UDF. Your UDF will need to set the values referenced by the
real pointer
rr. The values must be specified in
(where the volume is the cell volume).
Example
The following compiled UDF named user_evap_condens_react defines the reaction rate required to simulate evaporation or condensation on the surface of droplets. Such a reaction can be formally described by the following:
Here, gas is a primary phase mixture of two species:
and air. Droplets constitute the secondary phase and represent a mixture of one species -
. Single-species mixtures are allowed in multiphase models.
The formulation for the reaction rate follows the model for particle evaporation that is defined in this section in the separate Theory Guide .
#include "udf.h" /*Constants used in psat_h2o to calculate saturation pressure*/ #define PSAT_A 0.01 #define PSAT_TP 338.15 #define C_LOOP 8 #define H2O_PC 22.089E6 #define H2O_TC 647.286 /*user inputs*/ #define MAX_SPE_EQNS_PRIM 2 /*total number of species in primary phase*/ #define index_evap_primary 0 /*evaporating species index in primary phase*/ #define prim_index 0 /*index of primary phase*/ #define P_OPER 101325 /*operating pressure equal to GUI value*/ /*end of user inputs*/ /*************************************************************/ /* UDF for specifying an interfacial area density */ /*************************************************************/ double psat_h2o(double tsat) /* */ /* Computes saturation pressure of water vapor */ /* as function of temperature */ /* Equation is taken from THERMODYNAMIC PROPERTIES IN SI, */ /* by Reynolds, 1979 */ /* Returns pressure in PASCALS, given temperature in KELVIN */ { int i; double var1,sum1,ans1,psat; double constants[8]={-7.4192420, 2.97221E-1, -1.155286E-1, 8.68563E-3, 1.094098E-3, -4.39993E-3, 2.520658E-3, -5.218684E-4}; /* var1 is an expression that is used in the summation loop */ var1 = PSAT_A*(tsat-PSAT_TP); /* Compute summation loop */ i = 0; sum1 = 0.0; while (i < C_LOOP){ sum1+=constants[i]*pow(var1,i); ++i; } ans1 = sum1*(H2O_TC/tsat-1.0); /* compute exponential to determine result */ /* psat has units of Pascals */ psat = H2O_PC*exp(ans1); return psat; } DEFINE_HET_RXN_RATE(user_evap_condens_react, c, t, hr, mw, yi, rr, rr_t) { Thread **pt = THREAD_SUB_THREADS(t); Thread *tp = pt[0]; Thread *ts = pt[1]; int i; real concentration_evap_primary, accum = 0., mole_frac_evap_prim, concentration_sat ; real T_prim = C_T(c,tp); /*primary phase (gas) temperature*/ real T_sec = C_T(c,ts); /*secondary phase (droplet) temperature*/ real diam = C_PHASE_DIAMETER(c,ts); /*secondary phase diameter*/ real D_evap_prim = C_DIFF_EFF(c,tp,index_evap_primary) - 0.7*C_MU_T(c,tp)/C_R(c,tp); /*primary phase species turbulent diffusivity*/ real Re, Sc, Nu, urel, urelx,urely,urelz=0., mass_coeff, area_density, flux_evap ; if(Data_Valid_P()) { urelx = C_U(c,tp) - C_U(c,ts); urely = C_V(c,tp) - C_V(c,ts); #if RP_3D urelz = C_W(c,tp) - C_W(c,ts); #endif urel = sqrt(urelx*urelx + urely*urely + urelz*urelz); /*relative velocity*/ Re = urel * diam * C_R(c,tp) / C_MU_L(c,tp); Sc = C_MU_L(c,tp) / C_R(c,tp) / D_evap_prim ; Nu = 2. + 0.6 * pow(Re, 0.5)* pow(Sc, 0.333); mass_coeff = Nu * D_evap_prim / diam ; for (i=0; i < MAX_SPE_EQNS_PRIM ; i++) { accum = accum + C_YI(c,tp,i)/mw[i][prim_index]; } mole_frac_evap_prim = C_YI(c,tp,index_evap_primary ) / mw[index_evap_primary][prim_index] / accum; concentration_evap_primary = mole_frac_evap_prim * P_OPER / UNIVERSAL_GAS_CONSTANT / T_prim ; concentration_sat = psat_h2o(T_sec)/UNIVERSAL_GAS_CONSTANT/T_sec ; area_density = 6. * C_VOF(c,ts) / diam ; flux_evap = mass_coeff * (concentration_sat - concentration_evap_primary ) ; *rr = area_density * flux_evap ; } } |
Hooking a Heterogeneous Reaction Rate UDF to
ANSYS FLUENT
After the UDF that you have defined using DEFINE_HET_RXN_RATE is interpreted (Chapter 4) or compiled (Chapter 5), the name of the argument that you supplied as the first DEFINE macro argument (e.g., user_evap_condens_react) will become visible and selectable under Reaction Rate Function in the Reactions tab of the Phase Interaction dialog box. (Note you will first need to specify the Total Number of Reactions greater than 0.) See Section 6.3.3 for details.