
[Sponsors] 
September 16, 2008, 22:46 
UDF in Fluent

#1 
Guest
Posts: n/a

Hi everyone,
I am trying to simulate an elastically mounted circular cylinder in crossflow within Fluent using a UDF to control its motion harmonically. The setup is exactly the same as the stationary cylinder in Tutorial 6: Flow Past a Circular Cylinder. With the addition of a UDF to this situation, I am hoping to simulate resonance from vortexshedding and therefore, be able to control the motion of the cylinder using a SDOF solution. I have used the code for defining center of gravity and just added the SDOF solution equations to this code. At the moment the code seems to be running ok, however, it is not communicating with Fluent. Using the message command in the code, the force, displacement and velocity of the cylinder are completely different to the values that Fluent provides when reporting. However, the cylinder still seems to be moving, but not corresponding to the displacement from the UDF. If anyone can help, this would be greatly appreciated! I can supply more information if anyone asks, as at the moment, I am not sure what else to say. Please find a copy of the code below. Thanks. /************************************************** ********** * 1degree of freedom equation of motion (ydirection) * compiled UDF ************************************************** **********/ #include "udf.h" static real v_prev = 0.0; /* initial velocity of cylinder */ static real x_prev = 0.0; /* initial displacement of cylinder */ static real force_prev = 0.0; /* initial force on cylinder */ DEFINE_CG_MOTION(cylinder,dt,vel,omega,time,dtime) { Thread *t; face_t f; real NV_VEC(A); real force, v, x, dv, m, k, c_absorb, z, wn, wd, beta, a, b, c, d, aa, bb, cc, dd, coeff1, coeff2, coeff3; /* reset velocities */ NV_S(vel, =, 0.0); NV_S(omega, =, 0.0); if (!Data_Valid_P()) return; /* get the thread pointer for which this motion is defined */ t = DT_THREAD(dt); m = 50000.0; /* mass of cylinder */ k = 1.0; /* spring stiffness of cylinder system */ c_absorb = 1.0; /* damping coefficient */ z = c_absorb/(2*sqrt(k*m)); /* damping parameter */ wn = sqrt(k/m); /* natural frequency of system */ wd = sqrt(1  pow(z, 2))*wn; /* damped frequency of the system */ beta = z*wn; /* calculation constant */ /* compute pressure force on body by looping through all faces */ force = 0.0; Message ("time = %f, y_disp = %f, y_vel = %f, force = %f\n", time, x_prev, v_prev, force); begin_f_loop(f,t) { /* integral to find force */ F_AREA(A,f,t); force += F_P(f,t) * NV_MAG(A); } end_f_loop(f,t) /* compute change in velocity, i.e., dv = (F  c*v  k*x) * dt / mass velocity update using explicit Euler formula */ Message ("time = %f, y_disp = %f, y_vel = %f, force = %f\n", time, x_prev, v_prev, force); /* define the constant variables for displacement and velocity expressions */ coeff1 = 1/(k*wd*dtime); coeff2 = (pow(wd, 2)  pow(beta, 2))/pow(wn, 2); coeff3 = (2*wd*beta)/pow(wn, 2); a = coeff1*(exp(beta*dtime)*(((coeff2  (beta*dtime))*sin(wd*dtime))  ((coeff3 + (wd*dtime))*cos(wd*dtime))) + coeff3); b = coeff1*(exp(beta*dtime)*((coeff2*sin(wd*dtime)) + (coeff3*cos(wd*dtime))) + (wd*dtime)  coeff3); c = exp(beta*dtime)*(cos(wd*dtime) + ((beta/wd)*sin(wd*dtime))); d = (1/wd)*exp(beta*dtime)*sin(wd*dtime); aa = coeff1*(exp(beta*dtime)*(((beta + (dtime*pow(wn, 2)))*sin(wd*dtime)) + (wd*cos(wd*dtime)))  wd); bb = coeff1*(exp(beta*dtime)*((beta*sin(wd*dtime)) + (wd*cos(wd*dtime))) + wd); cc = (pow(wn, 2)/wd)*exp(beta*dtime)*sin(wd*dtime); dd = exp(beta*dtime)*(cos(wd*dtime)  ((beta/wd)*sin(wd*dtime))); x = a*force_prev + b*force + c*x_prev + d*v_prev; /* displacement of cylinder updated each time step */ v = aa*force_prev + bb*force + cc*x_prev + dd*v_prev; /* velocity of cylinder updated each time step */ dv = (dtime*(force  (c_absorb*v)  (k*x))) / m; /* change in velocity updated each time step */ x_prev = x; v_prev = v; force_prev = force; Message ("time = %f, y_disp = %f, y_vel = %f, force = %f\n", time, x_prev, v_prev, force_prev); /* set ycomponent of velocity */ vel[1] = dv; } 

September 17, 2008, 22:37 
Re: UDF in Fluent

#2 
Guest
Posts: n/a

I know that the UDF apears lengthy, but the eleven or so variables towards the end of the code are just defining a step function for the SDOF system. The displacement, velocity and force are then updated to allow the calculations to be done in the next time step, using the previous time step variables. As I mentioned, this process seems to be working just fine, however, the returned values displayed throughout the message commands in the UDF are completely different to the corresponding values found in Fluent through the REPORT > FORCES or SURFACE INTEGRALS. Therefore, the motion of the cylinder is not harmonic and only in one direction, which causes the solution to diverge and present a negative volume error. Also, the CL history plot shows a constant zero for the first few iterations, then suddenly drops steeply to a large value of 10e6. Definitely unrealistic! I have tried changing the values of mass, spring stiffness (of the cylinder) and damping, as well as the time step size, but the same thing tends to happen.
I know there is most likely a syntax error somewhere. As I am not too familiar with C++ or Fluent commands, I cannot see what needs fixing in the code. If anyone has tried a similar problem of controlling a cylinder in crossflow and mounted between springs (elastic motion), your help would be great! If anyone knows what syntax error is causing the UDF to be misinterpreted by Fluent, I will appreciate the input. Thanks. 

October 11, 2011, 04:40 

#3  
Member
^^
Join Date: Aug 2011
Posts: 70
Rep Power: 14 
Quote:
please let me know what you have problem 

February 21, 2012, 12:44 

#4 
New Member
Peter
Join Date: Jan 2012
Posts: 29
Rep Power: 13 
Hello everyone,
I am currently undertaking a similar project for my BEng Thesis at University. Has anyone come up with a solution to Andrews problem? Alternatively, does anyone have a working UDF for an elastically mounted cylinder, with one or two degrees of freedom. Many thanks, Peter 

March 16, 2012, 04:35 
Hi peatmac,

#5  
Member
^^
Join Date: Aug 2011
Posts: 70
Rep Power: 14 
Quote:
I also have some problem wake galloping of two tandem cylinders. if you work with me, please send me email (colopolo70@gmail.com) 

March 7, 2016, 04:38 

#6  
Member
N B Khan
Join Date: Jan 2014
Posts: 39
Rep Power: 11 
Quote:
Did anyone find the correct UDF for force oscillation cylinder... I am still looking for that... Kindly help if anyone can,,, My email ID is n_bkhan@yahoo.com Thanks in advance Regards Niaz 

Thread Tools  Search this Thread 
Display Modes  


Similar Threads  
Thread  Thread Starter  Forum  Replies  Last Post 
Fluent in Linux vs. Fluent in Windows  Melih  FLUENT  6  November 16, 2014 10:39 
Fluent/Unix vs. Fluent/Windows  sjjaber  FLUENT  10  January 5, 2005 17:58 
Running FLUENT 6.0 sims. on FLUENT 6.1  ozgur  FLUENT  2  April 2, 2004 14:23 