CFD Online Discussion Forums

CFD Online Discussion Forums (http://www.cfd-online.com/Forums/)
-   FLUENT (http://www.cfd-online.com/Forums/fluent/)
-   -   Moving wall with velocity profile (http://www.cfd-online.com/Forums/fluent/86619-moving-wall-velocity-profile.html)

Tobard March 28, 2011 12:53

Moving wall with velocity profile
 
Hi everyone!

I need to study a transient flow inside a closed cylinder which is starting to rotate. It seems impossible to put a velocity profile instead of a constant value under rotating wall boundary conditions with Fluent. Is there another way to do this? Is there somebody here who already tried such a transient simulation?

Thank you very much for your help!

Amir March 28, 2011 13:14

Hi,
if you try components option in wall boundary conditions, you can impose any velocity profile by a UDF.

Tobard March 28, 2011 13:44

Quote:

Originally Posted by Amir (Post 301242)
Hi,
if you try components option in wall boundary conditions, you can impose any velocity profile by a UDF.

Thank you for your answer. I tried this but I would like to input a rotational speed and the only velocity components that are displayed are X, Y and Z components in m/s... Is it possible to change it in order to work in cylindrical coordinates for example? I haven't found anything satisfactory so far.

Thank you!

Amir March 28, 2011 16:01

note that you can implement coordinates of surface elements. so you can use a trigonometric functions in your UDF to obtain Cartesian components from rotational speed.

Tobard March 29, 2011 11:15

Dear Amir,

Ok, I am trying to use these UDF. Since I am not really used to this option, it is difficult for me to understand how to implement coordinates of surface elements, as you said. Would it be possible to have an example of the kind of script you was thinking about? I haven't found anything similar in Fluent UDF Guide.

Thank you very much for your help!

Tobard.

Amir March 29, 2011 11:41

Hi,
it's something like this (as a part of UDF):
Quote:

real x[ND_ND],xf,yf,zf,theta;
F_CENTROID(x,f,t);
xf=x[0];
yf= x[1];
zf= x[2];
theta=atan(yf/xf);
F_PROFILE(f,t,i) = R*omega*sin(theta);
it can be used for x-component. (check it's sign and ...)

Tobard March 30, 2011 12:20

Hi,

Following your advice and trying to understand UDF philosophy, I have written the following function (I think I will have to do 2 different files in order to fill both X and Y velocity component fields in Fluent boundary conditions later, but it is a global base):
Quote:

#include"udf.h"
DEFINE_ADJUST(try3,d)
{
Thread *tf;
face_t f;
real time;
time = CURRENT_TIME;
real x[ND_ND];
real xf, yf;
real omega;
omega = 2*time;
begin_f_loop(f,tf)
{
if (BOUNDARY_FACE_THREAD_P(tf))
{
F_CENTROID(x,f,time);
xf = x[0];
yf = x[1];
F_U(f,time) = -omega*yf; /* For x-component */
F_V(f,time) = omega*xf; /* For y-component */
}
}
end_f_loop(f,tf)
}
Could you please take a look at this? The purpose is to change wall rotational velocity at each time step, and I am not sure my code is correct.

Besides when I try to interpret this with Fluent, I get these errors:
Quote:

Error: [...] line 8: parse error.
Error: [...] line 9: parse error.
Error: [...] line 10: parse error.
Error: [...] line 11: omega: undeclared variable
and I don't understand why!?

Thank you very much for your help!

Tobard

Amir March 30, 2011 16:01

Hi,
I proposed you these changes:
Quote:

#include "udf.h"
#include "math.h"
DEFINE_PROFILE(x_velocity,thread,position)
{
face_t f;
real time = CURRENT_TIME;
real x[ND_ND],theta;
real R=1.0;
real omega=2.0*time;
begin_f_loop(f, thread)
{
F_CENTROID(x,f,thread);
theta=atan(x[1]/x[0]);
F_PROFILE(f, thread, position) = R*omega*sin(theta);
}
end_f_loop(f, thread)
}
I've compiled this without any error.
you're right, you need another UDF for y velocity which is similar to above.

regards,

Tobard March 30, 2011 17:19

Thank you, it helps me much! I just would like to understand some points:

- My study needs to change ONLY wall (boundary) velocity (and then observe inertia and viscosity action into the fluid). Does your function really allow that? Using it under boundary conditions menu would then only apply it on boundary faces?

- Is it better to use F_PROFILE instead of F_U or F_V? I am afraid that F_PROFILE may change both X and Y velocity components although I need to change them one by one. (Furthermore F_U and F_V would allow me to not use trigonometrical functions, writing u= -omega*y and v= omega*x)

- Does Fluent accept using several interpreted UDFs at the same time? Or do I have to compile them? Thank you again, I think it will work now!

Regards,
Tobard

Amir March 31, 2011 03:35

Hi,

Quote:

- My study needs to change ONLY wall (boundary) velocity (and then observe inertia and viscosity action into the fluid). Does your function really allow that? Using it under boundary conditions menu would then only apply it on boundary faces?
it depends on where you'll hook this UDF, if you hook that over wall boundary, it would change wall velocities.

Quote:

- Is it better to use F_PROFILE instead of F_U or F_V? I am afraid that F_PROFILE may change both X and Y velocity components although I need to change them one by one. (Furthermore F_U and F_V would allow me to not use trigonometrical functions, writing u= -omega*y and v= omega*x)
I don't agree with you, in both cases you need to use trigonometric functions but here, you can simplify your relations. i.e. :
R*omega*sin(theta)=R*omega*sin(atan(y/x))=y*omega
these relations are applicable to both procedures. note that using DEFINE_PROFILE for setting boundary conditions is more conservative and reliable than using other functions.

Quote:

- Does Fluent accept using several interpreted UDFs at the same time? Or do I have to compile them? Thank you again, I think it will work now!
that's one of the restrictions of interpreted UDFs. I proposed you using compiled one.

Regards,
Amir

Tobard April 4, 2011 10:22

Hi,

I post this last message to thank you: my simulation is now working, using DEFINE_PROFILE just as you said.
A little feedback: working with direct coordinates rather than using trigonometrical functions avoids sign problems.

Regards,

Tobard

Tobard April 13, 2011 15:10

Hi everybody!

I come here again because I encountered some new difficulties: I succeed in putting a profile law making the wall of my 2D cylinder rotate.

Now I would like to improve my model by dividing my cylinder in several zones (adding a wall along portion of diameter, basically). The whole assembly is not rotating as expected because "you cannot use the moving wall condition to model problems where the wall has a motion normal to itself. FLUENT will neglect any normal component of wall motion that you specify using the methods below." (Fluent User Guide).

A moving reference frame would allow me to make my walls rotate. But is it possible to hook a UDF to a moving reference frame (I see no available field for that)? Is there another way to do it?

Thank you so much for your help!

Tobard

Amir April 14, 2011 15:23

Hi,
I've done such cases by implementation of dynamic mesh, in FLUENT 6.3 you can't use MRF for arbitrary motions(as you said) but it may be included in latest versions.

Tobard April 14, 2011 15:42

I work on Fluent 12.0.1 or 12.1 and it seems not to be better. Do you think a moving mesh could be a solution? My geometry is similar to a disk split into to parts...

Tobard

Amir April 15, 2011 10:47

certainly, moving mesh can help you to impose normal velocity to walls. I'll appreciate any other ideas ...

Tobard May 3, 2011 14:41

Dear Amir,

Do you know where I could find samples or UDF functions close to my problem? I really don't see how to write (and hook) a UDF making my walls move and it is really difficult to find any help on the Internet.

Any concrete suggestion would be appreciated...

Thank you very much.

Tobard

Amir May 4, 2011 15:22

Hi,
I wrote a UDF which rotate a wall but you can change that easily; here you are:
Quote:

#include "udf.h"
#include "stdio.h"
#include "math.h"
#define pi 3.1415
#define amp 0.174
#define freq 0.75
real w=2*pi*freq;
DEFINE_GRID_MOTION(motion,domain,dt,time,dtime)
{
Thread *tf = DT_THREAD(dt);
face_t f;
Node *v;
real theta,a,b;
int n;
SET_DEFORMING_THREAD_FLAG(THREAD_T0(tf));
begin_f_loop(f,tf)
{
f_node_loop(f,tf,n)
{
v=F_NODE(f,tf,n);


if (NODE_POS_NEED_UPDATE (v))
{
NODE_POS_UPDATED(v);
theta=(-1)*amp*w*cos(w*time)*dtime;
a=cos(theta)*NODE_X(v)-sin(theta)*NODE_Y(v);
b=sin(theta)*NODE_X(v)+cos(theta)*NODE_Y(v);
NODE_X(v)=a;
NODE_Y(v)=b;
}
}
}
end_f_loop(f,tf);
}

Tobard May 5, 2011 19:03

Dear Amir,

What a relief to receive your answer! It greatly helped me and my problem is solved: it rotates!

I sincerely thank you!

Tobard

Tobard May 16, 2011 11:19

Dear Amir,

Sorry for coming to you again...
My simulations with Dynamic mesh give me strange results. Do you know how Fluent manage the transition between two time steps? The velocity is well defined at the boundary but seems not able to diffuse into the whole fluid zone...!
I tried with a DEFINE_CD_MOTION function instead of the DEFINE_GRID_MOTION one with no improvement. So I really don't know where this problem comes from.

Is there restrictions in the use of Dynamic mesh?
Have you ever encountered such an issue?

Thank you again for your help!

Tobard

Amir May 16, 2011 12:14

Hi Tobard,
pay attention to locations where you hooked this UDF for. In other words, in dynamic zones, set e.g. walls, define interior and other rotating boundaries except the fluid zones.

regards,

Amir


All times are GMT -4. The time now is 01:45.