FLUENT V6 - Implementing a droplet breakup model for steady dpm tracking


FLUENT can predict the trajectory of discrete phase particles using two approaches: steady and unsteady tracking. (see Solution 934 for additional information on these two DPM tracking approaches.)

Although steady DPM tracking is more computationally efficient than unsteady tracking, there are certain limitations. One of those limitations is that the spray models for breakup are not available for steady tracking. To incorporate droplet breakup into their models while maintianing the computational efficiency afforded by steady tracking, some users have turned to implementing breakup models using UDFs. However, care must be taken to ensure that this is done properly.

To facilitate the development of user-defined droplet breakup models, a template is provided here. The template permits the droplets to breakup one time when they cross the x=0.1 m plane, and the breakup results in two equally sized daughter droplets. These aspects can of course be modified, but it is important that P_DIAM(p) and P_MASS(p) are specified correctly. P_MASS0(p) must also be included if 2-way coupling is enabled in the discrete phase model.

NOTE: This steady breakup template works for FLUENT 6.3.31 and later versions.


/* breakup template for steady tracking
/*
/* this example breaks up the droplets one time when they
/* cross the x = 0.1 m plane.
/*
/* one dpm scalar is required
/*
/* NOTE: This steady breakup template works for FLUENT 6.3.31 and later versions. */


#include "udf.h"

#define BREAKUP_SMALL 1e-8

void assign_init_mass_to_tp_and_p(Tracked_Particle *tp, real mass_factor)
{
#if RP_NODE
Injection *I = tp->injection;
Particle *p = NULL;
#endif

P_INIT_MASS(tp) *= mass_factor;

#if RP_NODE
if (dpm_par.unsteady_tracking)
return;

loop(p, I->p)
if (p->part_id == tp->part_id)
P_INIT_MASS(p) *= mass_factor;
#endif
}

DEFINE_DPM_SCALAR_UPDATE(steady_breakup,c,t,initialize,p)
{
real mass_factor = 0.5; /* drop breaks in half */

if (dpm_par.unsteady_tracking)
return;

if (initialize)
{
p->user[0] = 0.;
}
else
{
if ((p->user[0] < BREAKUP_SMALL) && (P_POS(p)[0] > 0.1))
{
P_DIAM(p) /= pow( 1/mass_factor, 0.33333 ); /* assume droplets break in half */
P_MASS(p) *= mass_factor;
P_MASS0(p) *= mass_factor; /* necessary if 'interaction with continuous phase' is enabled */
p->user[0] = 1.;
assign_init_mass_to_tp_and_p(p,mass_factor);
}
}
}





Show Form
No comments yet. Be the first to add a comment!