CFD Online Discussion Forums

CFD Online Discussion Forums (http://www.cfd-online.com/Forums/)
-   Fluent UDF and Scheme Programming (http://www.cfd-online.com/Forums/fluent-udf/)
-   -   Consulting for some issues of FLUENT UDF and UDS (http://www.cfd-online.com/Forums/fluent-udf/100049-consulting-some-issues-fluent-udf-uds.html)

wjl163 April 19, 2012 04:48

Consulting for some issues of FLUENT UDF and UDS
 
1 Attachment(s)
:)Hello everyone!
I am a new learner of FLUENT, my FLUENT version is 6.3.26. I am working on a numerical simulation project studying PM2.5 particle trajectory in a wire-plate electrostatic precipitator, I have created a UDF to do the simulation, here is the UDF:
#include "udf.h"
#include "dpm.h"
#include "surf.h"
#include "metric.h"
#include "math.h"
#define Pia 3.14
#define epsilon_0 8.85e-12
#define epsilon_r 4.0
#define K0 1.38e-23
#define e 1.6e-19
#define N 1.0e+15
#define number 1
#define mi 4.82E-26
#define B 0.0
enum
{
v,
rho,
N_REQUIRED_UDS
};
DEFINE_SOURCE(v_source,c,t,dS,eqn)
{
real source;
source = 0;
dS[eqn] = 0;
return source;
}
DEFINE_SOURCE(rho_source,c,t,dS,eqn)
{
real *grad_v, div_v, con, source;
grad_v = C_UDSI_G(c,t,v);
div_v = NV_DOT(grad_v, grad_v);

con=div_v+C_UDSI(c,t,rho)/epsilon_0;
source = con * C_UDSI(c,t,rho);
dS[eqn] =div_v+2*C_UDSI(c,t,rho)/epsilon_0;
return source;
}

DEFINE_UDS_FLUX(rho_flux,f,t,i)
{
cell_t c0, c1 = -1;
Thread *t0, *t1 = NULL;
real NV_VEC(psi_vec), NV_VEC(A), flux = 0.0; /* declaring vectors psi and A */
real *grad_v, *grad_v1;
real dens;
c0 = F_C0(f,t);
t0 = F_C0_THREAD(f,t);
F_AREA(A, f, t);
/* If face lies at domain boundary, use face values; */
/* If face lies IN the domain, use average of adjacent cells. */
if (BOUNDARY_FACE_THREAD_P(t)) /*Most face values will be available*/
{

/* Depending on its BC, density may not be set on face thread*/
if (NNULLP(THREAD_STORAGE(t,SV_DENSITY)))
dens = F_R(f,t); /* Set dens to face value if available */
else
dens = C_R(c0,t0); /* else, set dens to cell value */

NV_DS(psi_vec, =, C_UDSI_G(c0,t0,v)[0], C_UDSI_G(c0,t0,v)[1], 0, *, dens);
flux = NV_DOT(psi_vec, A); /* flux through Face */
}
else
{
c1 = F_C1(f,t); /* Get cell on other side of face */
t1 = F_C1_THREAD(f,t);
grad_v = C_UDSI_G(c0,t0,v);
grad_v1 = C_UDSI_G(c1,t1,v);
NV_DS(psi_vec, =, grad_v[0],grad_v[1],0,*,C_R(c0,t0));
NV_DS(psi_vec, +=, grad_v1[0],grad_v1[1],0,*,C_R(c1,t1));
flux = NV_DOT(psi_vec, A)/2.0; /* Average flux through face */
}
/* Fluent will multiply the returned value by phi_f (the scalar's
value at the face) to get the "complete'' advective term. */
return F_FLUX(f,t) / dens;
}

DEFINE_DPM_BODY_FORCE(particle_body_force,p,i)
{
real bforce=0.,Qk,Qd,Q;
real x[ND_ND];
cell_t c=RP_CELL(&(p->cCell));
Thread *t=RP_THREAD(&(p->cCell));
C_CENTROID(x,c,t);
if(i==1)
Qd=3*Pia*epsilon_0*(epsilon_r/(epsilon_r+2))*pow(P_DIAM(p),2.0)*C_UDSI_G(c,t,0)[1];
Qk=2*Pia*epsilon_0*K0*P_T(p)*P_DIAM(p)/e*log(1+pow(e,2.)*N*P_DIAM(p)*P_TIME(p)*number/(2*epsilon_0*sqrt(16*mi*K0*P_T(p)/3)));
Q=fabs(Qd)+fabs(Qk);
bforce=Q*C_UDSI_G(c,t,0)[1]+Q*B*P_VEL(p)[0];
return (bforce/P_MASS(p));
}

DEFINE_DPM_DRAG(particle_drag_force, Re, p)
{
float w, drag_force;
printf ("Re is %6.3f\n", Re);
/* Note: when you print a "real" data, use "%g" instead of "%f" */
if (Re < 0.01)
{
drag_force=18.0;
return (drag_force);
}
else if (Re < 20.0)
{
w = log10(Re);
drag_force = 18.0 + 2.367*pow(Re,0.82-0.05*w) ;
return (drag_force);
}
else
/* Note: suggested valid range 20 < Re < 260 */
{
drag_force = 18.0 + 3.483*pow(Re,0.6305) ;
return (drag_force);
}
}
After the UDF programming, I have copied a schematic procedure to help me complete the simulation, attached below.
I don't know how to realize this process, and how to set the UDS scalar in this case, please tell me how to do? Thank you.

89566008 November 3, 2012 08:09

hi Nick Wu
I also studying on ESP and need help . Do you solve your problem ? can you help me ?
thank you

msaeedsadeghi November 12, 2012 04:24

There is no need of creating procedure. Fluent solves equations one by one, and then it solves UDS(s).
You should just hook functions in right places. Fluent will use them when needed. and in an iterative solution it will be converged.


All times are GMT -4. The time now is 01:59.