We have an exciting announcement about badges coming in May 2025. Until then, we will temporarily stop issuing new badges for course completions and certifications. However, all completions will be recorded and fulfilled after May 2025.

Ansys Learning Forum Forums Discuss Simulation Fluids Ansys Fluent UDF: DEFINE_DPM_BC Reply To: Ansys Fluent UDF: DEFINE_DPM_BC

kiran.purushothamakeshavan
Subscriber

 

I think the issue was with the order of each force quantities, it was in the scale if E-09 or E-11 so I used a factor which multiplied these insignificant quantities to compare with the others.

anyway, now my question is simple, I get to see how many particles stick and how many bounce from the object. How do I visualise the contours for the same? I would want to display the particle adhesion on a surface as a heatmap.

here is my code:

 

#include “udf.h”
#include “dpm.h”


#define mu 0.5
#define PI 3.14
 

real FD(real diam, real velocidad)
{
    return ((1/2) * 1.225 * 0.44 * M_PI*(((diam)*(diam))/4) * (velocidad*velocidad));
}

FILE *fp1;
FILE *fp2;
FILE *fp3;

//real x[3];

//x[0] = 0.0;   // Assign value to the x component
//x[1] = 0.0;   // Assign value to the y component
//x[2] = 0.0;   // Assign value to the z component

DEFINE_DPM_DRAG(particle_drag_force, Re, p)
{
    FILE *fp1;
    real w, drag_force, F, nf, ff, ff123;
    Thread* tcell = P_CELL_THREAD(p);
    cell_t c = P_CELL(p);
    real relVel[ND_3], dvtdn, fluidVel[ND_3];

    if (Re < 1)
    {
        drag_force = 18;
    }
    else if (Re < 20.0)
    {
        w = log10(Re);
        drag_force = 18.0 + 2.367 * pow(Re, 0.82 – 0.05 * w);
    }
    else
    {
        drag_force = 18.0 + 3.483 * pow(Re, 0.6305);
    }

    NV_D(fluidVel, =, C_U(c, tcell), C_V(c, tcell), C_W(c, tcell));         //assigning fluid velocity components to vector
    NV_VV(relVel, =, fluidVel, -, P_VEL(p));                        //calculating relative velocity of flow on particle by subtracting absolute particle velocity from fluid velocity
    dvtdn = NV_MAG(relVel);                                 //calculation of relative velocity magnitude
    // P_USER_REAL(p, 0) = FD(drag_force, C_MU_L(c, tcell), P_RHO(p), P_DIAM(p), P_MASS(p), dvtdn); /*Drag force*/
    P_USER_REAL(p, 0) = FD(P_DIAM(p), dvtdn); /*Drag force*/
    P_USER_REAL(p, 1) = dvtdn;
    // F = (1/2)*1.225*0.3*M_PI*(((P_DIAM(p))*(P_DIAM(p)))/4)*(dvtdn*dvtdn);
    // F = (1/2)*1.225*0.3*10000000*M_PI*(((P_DIAM(p))*(P_DIAM(p)))/4)*(dvtdn*dvtdn)*(10000000000);
    // P_USER_REAL(p, 2) = F;

    // nf = C_P(c, tcell) * M_PI (((P_DIAM(p))*(P_DIAM(p)))/4) *10000000000;
 
    fp1=fopen (“Impact-2-drag-data.txt” , “a”);
    // fprintf( fp1 , “%e %f %e %f %f %e %e\n”, P_USER_REAL(p, 0), P_USER_REAL(p, 1), P_USER_REAL(p, 2), drag_force, P_DIAM(p), F, P_USER_REAL(p, 3));
    real diameter_squared = P_DIAM(p) * P_DIAM(p);
    real area_term = (diameter_squared) / 4;
    real velocity_term = dvtdn * dvtdn;
    real constant_factor = (1.0 / 2.0) * 1.225 * 0.3 * PI;
    F = constant_factor * area_term * velocity_term * (10000000);
    P_USER_REAL(p, 2) = F;

    nf = C_P(c, tcell) * (PI/4.0) * diameter_squared *10000000;
    ff = mu * nf;
    ff123 = ff;
    P_USER_REAL(p, 3) = ff123;

    fprintf(fp1, “Area Term: %e, Velocity Term: %e, F (final): %e, Constant factor: %e, friction force: %e, Normal force: %e\n”, area_term, velocity_term, P_USER_REAL(p, 2), constant_factor, P_USER_REAL(p, 3), nf);
    fprintf(fp1, “Pressure: %e,  ff123: %e\n”, C_P(c, tcell), ff123);
    fclose(fp1);

    return (drag_force);
}




DEFINE_DPM_BC(wall_model, p, t, f, f_normal, dim)
{
    real alpha;  /* angle of particle path with face normal */
    real vn=0.;
    real nor_coeff = 0.3;
    real tan_coeff = 0.3;
    real normal[3];
    int i;
    real posx, posy, posz;
    // real NV_VEC(x);
    real x[ND_ND];

   

 //#if !RP_HOST
 
    #if RP_2D
  //dim is always 2 in 2D compilation. Need special treatment for 2d axisymmetric and swirl flows
  if (rp_axi_swirl)
    {
      real R = sqrt(P_POS(p)[1]*P_POS(p)[1] +
                    P_POS(p)[2]*P_POS(p)[2]);
      if (R > 1.e-20)
        {
          idim = 3;
          normal[0] = f_normal[0];
          normal[1] = (f_normal[1]*P_POS(p)[1])/R;
          normal[2] = (f_normal[1]*P_POS(p)[2])/R;
        }
      else
        {
          for (i=0; i
            normal[i] = f_normal[i];
        }
    }
  else
    #endif


    for (i=0; i
        normal[i] = f_normal[i];
        //Message (“Text \n”);

    if (p->type == DPM_TYPE_INERT)
    {
        if (fabs(P_USER_REAL(p, 2)) < fabs(P_USER_REAL(p, 3)))

        // Particle bounce: Aerodynamic force > Pressure force on particle. So particle must be resuspended to the flow.
        {
            posx = P_POS(p)[0];
            posy = P_POS(p)[1];
            posz = P_POS(p)[2];

            P_USER_REAL(p, 4) = posx;
            P_USER_REAL(p, 5) = posy;
            P_USER_REAL(p, 6) = posz;

            for(i=0; i
                P_VEL(p)[i] = 0;
            P_USER_REAL(p, 7) += 1.;

            fp2=fopen (“Impact-Stick.txt” , “a”);
            fprintf( fp2 , “Force due to aero (Fa): %f, Friction force (ff): %f, How many stick? = %f, x coordinate: %f, y coorfdinate: %f, z coordinate: %f\n”, P_USER_REAL(p, 2), P_USER_REAL(p, 3), P_USER_REAL(p, 7), P_USER_REAL(p, 4), P_USER_REAL(p, 5), P_USER_REAL(p, 6));
            fflush(fp2);
            fclose(fp2);

            return PATH_ACTIVE;
        }
        else
        {
            alpha = (PI/2.0) – acos(MAX(-1.,MIN(1.,NV_DOT(normal,P_VEL(p))/ MAX(NV_MAG(P_VEL(p)),DPM_SMALL))));
            if ((NNULLP(t)) && (THREAD_TYPE(t) == THREAD_F_WALL))
           
            F_CENTROID(x, f, t);

            /* Compute normal velocity. */
            for(i=0; i
            vn += P_VEL(p)[i]*normal[i];

            /* Subtract off normal velocity. */
            for(i=0; i
            P_VEL(p)[i] -= vn*normal[i];

            /* Apply tangential coefficient of restitution. */
            for(i=0; i
            P_VEL(p)[i] *= tan_coeff;

            /* Add reflected normal velocity. */
            for(i=0; i
            P_VEL(p)[i] -= nor_coeff*vn*normal[i];  

            /* Store new velocity in P_VEL0 of particle */
            for(i=0; i
            P_VEL0(p)[i] = P_VEL(p)[i];

            P_USER_REAL(p, 8) += 1.;
            fp3=fopen (“Impact-Bounce.txt” , “a”) ;
            fprintf(fp3 , “Force due to aero (Fa): %f, Friction force (ff): %f, Number of particles bounced: %f\n”, P_USER_REAL(p, 2), P_USER_REAL(p, 3), P_USER_REAL(p, 8));
            fflush(fp3);
            fclose(fp3);
           
            return PATH_ACTIVE;
        }

    }
    else
    {
        return PATH_END;
    }
 //#endif
}