Nahian Masud
Subscriber

Hi, thanks for replying. this is the latest UDF I am using,

#include "udf.h"
#define MASS 0.0143
 
/* Declare a global variable to store the lift force */
static real lift = 0.0;
 
/* Function to compute the CG motion, including flapping motion */
DEFINE_CG_MOTION(paperfreq, dt, vel, omega, time, dtime)
{
    Domain *d = Get_Domain(1); // Assuming single phase flow
    Thread *t_object = Lookup_Thread(d, 7); // Airfoil's thread ID
    real force[2], moment[2], cg[2]; // Initialize arrays
    real x=0;
    NV_S(vel, =, 0.0);
    /* Compute force and moment at the boundary */
    Compute_Force_And_Moment(d, t_object, cg, force, moment, FALSE);
 
    /* Update global variable for lift force */
    lift = force[1];
 
    real w, a, pi;
    pi = 3.14159265;
    a = (pi * 15) / 180; // Pitch amplitude in radians
    w = 0.62832; // Angular velocity in rad/s
 
    /* Define the flapping motion */
    omega[2] = -a * 2 * pi * 2.97 * cos(2 * pi * 2.97 * time); // Pitching motion
    vel[1]=lift*dtime/MASS;
    x=vel[1];
    
Message("lift:%f x:%f\n",lift,x);
}

The problem is, if i use the vel[1], the lift force goes very high, so does the velocity. This makes the airfoil go outside domain and it creates floating point exception error. If I dont use the vel[1], and I print the lift force using Message, it shows correct lift value. 

What I need is, change the location of the airfoil based on the lift force. If there is any other way to give it a y-displacement it is also ok. I am giving it a flapping motion, which generates various lift force based on time and I need the latest lift force to update the airfoil location before going to next time step.