We’re putting the final touches on our new badges platform. Badge issuance remains temporarily paused, but all completions are being recorded and will be fulfilled once the platform is live. Thank you for your patience.

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
}