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

2.5.5 DEFINE_DPM_HEAT_MASS



Description


You can use DEFINE_DPM_HEAT_MASS to specify the heat and mass transfer of multicomponent particles to the gas phase.



Usage



DEFINE_DPM_HEAT_MASS( name, p, C_p, hgas, hvap, cvap_surf, dydt, dzdt)


Argument Type Description
symbol name UDF name.
Tracked_Particle *p Pointer to the Tracked_Particle data structure which
  contains data related to the particle being tracked.
real C_p Particle heat capacity.
real *hgas Enthalpies of vaporizing gas phase species.
real *hvap Vaporization enthalpies of vaporizing components.
real *cvap_surf Vapor equilibrium concentrations of vaporizing components.
real *dydt Source terms of the particle temperature and component masses.
dpms_t *dzdt Source terms of the gas phase enthalpy and species masses.
   
Function returns  
void  
   

There are eight arguments to DEFINE_DPM_HEAT_MASS: name, e, p, C_p, hgas, hvap, cvap_surf, dydt,and dzdt. You supply name, the name of the UDF. e, p, C_p, hgas, hvap,and cvap_surf are variables that are passed by the FLUENT solver to your UDF. Your UDF will need to compute the particle and gas phase source terms and store the values in dydt and dzdt, respectively.



Example


The following is an example of a compiled UDF that uses DEFINE_DPM_HEAT_MASS. It implements the source terms for the following:


Source Term Variable Unit
particle temperature dydt[0] K/s
particle component mass dydt[1..] kg/s
gas phase enthalpy dzdt>energy J/s
gas phase species mass dzdt>species[0..] kg/s

/***********************************************************************
   UDF for defining the heat and mass transport for
   multicomponent particle vaporization
***********************************************************************/
#include "udf.h"

DEFINE_DPM_HEAT_MASS(multivap,p,Cp,hgas,hvap,cvap_surf,dydt,dzdt)
{
  int ns;
  int nc = TP_N_COMPONENTS( p ); /* number of particle components */
  cell_t c0 = RP_CELL(&(p->cCell));  /* cell and thread */
  Thread *t0 = RP_THREAD( &(p->cCell) );  /* where the particle is in */
  Material *gas_mix = THREAD_MATERIAL( t0 ); /* gas mixture material */
  Material *cond_mix = p->injection->material;/* particle mixture material */
  cphase_state_t *c = &(p->cphase); /* cell info of particle location */
  real molwt[MAX_SPE_EQNS];  /* molecular weight of gas species */
  real Tp = P_T(p);  /* particle temperature */
  real mp = P_MASS(p);  /* particle mass */
  real molwt_bulk = 0.;  /* average molecular weight in bulk gas */
  real Dp = DPM_DIAM_FROM_VOL( mp / P_RHO(p) );  /* particle diameter */
  real Ap = DPM_AREA(Dp);                  /* particle surface */
  real Pr = c->sHeat * c->mu / c->tCond;   /* Prandtl number */
  real Nu = 2.0 + 0.6 * sqrt( p->Re ) * pow( Pr, 1./3. );  /* Nusselt number */
  real h = Nu * c->tCond / Dp;      /* Heat transfer coefficient */
  real dh_dt = h * ( c->temp - Tp ) * Ap;  /* heat source term */
  dydt[0] += dh_dt / ( mp * Cp );
  dzdt->energy -= dh_dt;
  {
    Material *sp;
    mixture_species_loop(gas_mix,sp,ns)
      {
	molwt[ns] = MATERIAL_PROP(sp,PROP_mwi); /* molecular weight of gas species */
      molwt_bulk += C_YI(c0,t0,ns) / molwt[ns];  /* average molecular weight */
      }
  }

  /* prevent division by zero */
  molwt_bulk = MAX(molwt_bulk,DPM_SMALL);

  for( ns = 0; ns < nc; ns++ )
    {
      /* gas species index of vaporization */
      int gas_index = TP_COMPONENT_INDEX_I(p,ns);
      if( gas_index >= 0 )
	{
	  /* condensed material */
	  Material * cond_c = MIXTURE_COMPONENT(cond_mix, ns );
	  /* vaporization temperature */
	  real vap_temp = MATERIAL_PROP(cond_c,PROP_vap_temp);
	  /* diffusion coefficient */
	  real D = MATERIAL_PROP_POLYNOMIAL( cond_c, PROP_binary_diffusivity, c->temp);
	  /* Schmidt number */
	  real Sc = c->mu / ( c->rho * D );
	  /* mass transfer coefficient */
	  real k = ( 2. + 0.6 * sqrt(p->Re) * pow( Sc, 1./3. ) ) * D / Dp;
	  /* bulk gas concentration */
	  real cvap_bulk = c->pressure / UNIVERSAL_GAS_CONSTANT / c->temp
	    * c->yi[gas_index] / molwt_bulk / solver_par.molWeight[gas_index];
	  /* vaporization rate */
	  real vap_rate = k * molwt[gas_index] * Ap * ( cvap_surf[ns] - cvap_bulk );
	  /* only condensation below vaporization temperature */
	  if( 0. < vap_rate && Tp < vap_temp )
	    vap_rate = 0.;

	  dydt[1+ns] -= vap_rate; 
	  dzdt->species[gas_index] += vap_rate;
	  /* dT/dt = dh/dt / (m Cp)*/
	  dydt[0] -= hvap[gas_index] * vap_rate / ( mp * Cp );
	  /* gas enthalpy source term */
	  dzdt->energy += hgas[gas_index] * vap_rate;
	}
    }
}



Hooking a DPM Particle Heat and Mass Transfer UDF to FLUENT


After the UDF that you have defined using DEFINE_DPM_HEAT_MASS is interpreted (Chapter  4) or compiled (Chapter  5), the name of the argument that you supplied as the first DEFINE macro argument (e.g., multivap) will become visible in the Set Injection Properties panel in FLUENT. See Section  6.4.5 for details on how to hook your DEFINE_DPM_HEAT_MASS UDF to FLUENT.


next up previous contents index Previous: 2.5.4 DEFINE_DPM_EROSION
Up: 2.5 Discrete Phase Model
Next: 2.5.6 DEFINE_DPM_INJECTION_INIT
© Fluent Inc. 2006-09-13