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

Thanks for your reply.

The issue was that I did not build the udf from x86_x64 VS prompt. After opening fluent from Visual Studio prompt UDF seems to be loading without issues.

However, I have an issue where the particles in my model seem to not stick to the boundary. below I’ve copied the UDF for your reference.


I expected to see certain particles bounce while the rest of them to stick to the surface, here I do not see the particles bounce or stick.

 

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

#define Rho_air 1.225  /* Air density in kg/m^3 */
#define Cd 0.47        /* Drag coefficient for a sphere */
#define mu 0.5         /* Coefficient of friction */

/* Define your boundary condition function */
DEFINE_DPM_BC(particle_bc, p, t, f, normal, dim)
{
    real V = sqrt(P_VEL(p)[0] * P_VEL(p)[0] + P_VEL(p)[1] * P_VEL(p)[1] + P_VEL(p)[2] * P_VEL(p)[2]);  /* Velocity magnitude in m/s */

    real radius = P_DIAM(p) / 2.0;
    real A = M_PI * radius * radius;  /* M_PI is a constant for π */

    /* Get the thread and cell pointers */
    Thread *t0 = P_CELL_THREAD(p);
    cell_t c0 = P_CELL(p);

    /* Get local pressure at the particle’s location */
    real P_local = C_P(c0, t0);

    /* Calculate aerodynamic force Fa */
    real Fa = 0.5 * Rho_air * A * Cd * V * V;

    /* Calculate normal force Fn */
    real Fn = P_local * A;

    /* Calculate frictional force Ff */
    real Ff = mu * Fn;

    /* Coefficient of restitution */
    real e;

    if (Fa > Ff)
    {
        /* Particle needs to bounce with a coefficient of restitution of 1 */
        e = 1.0;

        /* Update the particle velocity to simulate the bounce */
        for (int i = 0; i < dim; i++)
        {
            P_VEL(p)[i] = -e * P_VEL(p)[i];
        }

        return PATH_ACTIVE; /* No adhesion */
    }
    else
    {
        /* Particle sticks to the boundary with a coefficient of restitution of 0 */
        // e = 0.0;

        /* Update the particle velocity to simulate sticking */
        for (int i = 0; i < dim; i++)
        {
            P_VEL(p)[i] = 0;
        }

        P_USER_REAL(p, 0) = 1.;
        return PATH_ACTIVE; /* Adhesion */
    }
}



Can you please comment on the code?