[ANSYS, Inc. Logo] return to home search
next up previous contents index

2.4.3 DEFINE_HET_RXN_RATE



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 $\frac{kmol\;m^3} {s}$ (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:


 {\rm H_{2}O_{(liq)}} \longleftarrow \longrightarrow {\rm H_{2}O_{(gas)}} (2.4-1)

Here, gas is a primary phase mixture of two species: $H_2O_{(gas)}$ and air. Droplets constitute the secondary phase and represent a mixture of one species - $H_2O_{(liq)}$. 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.


next up previous contents index Previous: 2.4.2 DEFINE_EXCHANGE_PROPERTY
Up: 2.4 Multiphase DEFINE Macros
Next: 2.4.4 DEFINE_MASS_TRANSFER
Release 12.0 © ANSYS, Inc. 2009-01-14