Author Topic: UDF to compute the internal circulation in a bubble using VOF  (Read 4419 times)

Offline infocfd

  • Newbie
  • *
  • Posts: 45
  • Reputation: +0/-0
  • Searching for solution
    • View Profile
Advertisement
I need a UDF which can compute internal recirculation in a bubble in VOF simulation. Can any one help.

Offline william

  • Full Member
  • ***
  • Posts: 159
  • Reputation: +15/-0
  • Know it, share it.
    • View Profile
Re: UDF to compute the internal circulation in a bubble using VOF
« Reply #1 on: May 13, 2012, 11:08:19 AM »
Here you go:

1) Get the converged solution
2) The define on demand function below computes the velocity of the centroid of the bubble (and also the coordinates of the centroid).
3) The velocity vectors are modified depending upon this velocities.
Note: If you save this case file after executing the udf, then you will lose the actual velocity data. So make sure you have the original data securely saved.
**************************************************************************
* Udf to compute the velocity of the centroid of the bubble
* change the absolute velocity field to velocity field relative to
* the centroid of the bubble
* Written by Suman Basu of Fluent India
**************************************************************************/

#include "udf.h"

DEFINE_ON_DEMAND(move_with_bubble)
{
int phase_domain_index;
real vel_sum[ND_ND],co_ord1[ND_ND],co_ord[ND_ND],volume,average_velocity[ND_ND],x[ND_ND];
cell_t cell;
Thread *cell_thread;
Domain *subdomain,*mixture_domain=Get_Domain(1);
NV_S(vel_sum,=,0.);
NV_S(co_ord,=,0.);
volume=0.;
NV_S( average_velocity,=,0.);
NV_S(co_ord1,=,0.);
/* loop over all subdomains (phases) in the superdomain (mixture) */
sub_domain_loop(subdomain, mixture_domain, phase_domain_index)
{
/* loop if secondary phase */
if (DOMAIN_ID(subdomain) == 3)
/* loop over all cell threads in the secondary phase domain */
{
thread_loop_c (cell_thread,subdomain)
{
/* loop over all cells in secondary phase cell threads */
begin_c_loop(cell,cell_thread)
{
C_CENTROID(x,cell,cell_thread);
co_ord[0]+=C_VOF(cell,cell_thread)*C_VOLUME(cell,cell_thread)*x[0];
co_ord[1]+=C_VOF(cell,cell_thread)*C_VOLUME(cell,cell_thread)*x[1];
vel_sum[0]+= C_VOF(cell,cell_thread)*C_VOLUME(cell,cell_thread)*C_U(cell,cell_thread);
vel_sum[1]+= C_VOF(cell,cell_thread)*C_VOLUME(cell,cell_thread)*C_V(cell,cell_thread);
volume+=C_VOF(cell,cell_thread)*C_VOLUME(cell,cell_thread);
}
end_c_loop(cell,cell_thread)
}
}
}
NV_VS(co_ord1,=,co_ord,/,volume);
NV_VS(average_velocity,=,vel_sum,/,volume);
Message("Centroid[0]=%f\nCentroid[1]=%f\n",co_ord1[0],co_ord1[1]);
Message("V_Centroid[0]=%f\nV_Centroid[1]=%f\n",average_velocity[0],average_velocity[1]);

thread_loop_c (cell_thread,mixture_domain)
{
begin_c_loop(cell,cell_thread)
{
C_U(cell,cell_thread)=C_U(cell,cell_thread)-average_velocity[0];
C_V(cell,cell_thread)=C_V(cell,cell_thread)-average_velocity[1];
}
end_c_loop(cell,cell_thread)
}

}