CFD Online Discussion Forums

CFD Online Discussion Forums (
-   OpenFOAM Running, Solving & CFD (
-   -   Thermocapillary free surface flow (

zakifoam April 7, 2009 06:08

Thermocapillary free surface flow
Dear all,

I am interested in the VOF simulation of free surface flow driven by surface tension gradient due to surface temperature variation.

To do this, I have tried to add energy equation (temperature-based) in interFoam, in which the thermal conductivity is weighted by volume fraction, just like density and viscosity.

Additionally, at the interface, the smeared surface force has the normal and tangential components of the following form:


Here sigma_0 is surfac tension at reference temperature, sigma_T is dsigma/dT, i.e. the temperature gradient of surface tension, and T_0 is the reference temperature.

The first term of the normal force already exists in interFoam, so I need to implement the second term of the surface force and the tangential force.

I ended up with the following in UEqn.H :

surfaceScalarField muf = twoPhaseProperties.muf();

fvVectorMatrix UEqn
fvm::ddt(rho, U)
+ fvm::div(rhoPhi, U)
- fvm::laplacian(muf, U)
- (fvc::grad(U) & fvc::grad(muf))
//- fvc::div(muf*(fvc::interpolate(dev(fvc::grad(U))) & mesh.Sf()))

if (momentumPredictor)
fvc::interpolate(interface.sigmaK())*fvc::snGrad(g amma)
+ fvc::interpolate(dsigmadT*(T-T0)*interface.K())*fvc::snGrad(gamma)
+ fst
- ghf*fvc::snGrad(rho)
- fvc::snGrad(pd)
) * mesh.magSf()

and in pEqn.H :

phi = phiU +
fvc::interpolate(interface.sigmaK())*fvc::snGrad(g amma)
+ fvc::interpolate(dsigmadT*(T-T0)*interface.K())*fvc::snGrad(gamma)
+ fst
- ghf*fvc::snGrad(rho)

Here, I have implemented the second term for the normal force (highlighted in blue), but not the whole tangential component of the surface force (in red).

This tangential part is a bit confusing, since in UEqn.H, everything in fvc::reconstruct brackets should be of the type surfaceScalarField. I tried to specify fst as follows:

volVectorField nhat = gradGamma/(mag(gradGamma) + deltaN);

volVectorField fst = dsigmadT*(fvc::grad(T) - nhat*(nhat & fvc::grad(T)))*mag(gradGamma);

Here, fst is a volVectorField, which can not be used in UEqn.H and pEqn.H above.

Could anyone help me with this problem?

Thanks a lot,


haghajani May 7, 2009 04:30

Dear Zaki,
Have you had any success in solving your problem?
please let me know,

zakifoam May 19, 2009 07:29

1 Attachment(s)
Hi Hamed,

I think I have moved one very small step forward in solving the problem with the tangential force. Now I have a modified interFoam to account for this thermocapillary effect. However, after testing the code, I was not satisfied with the result in comparison with the one in literature.

Please find the source code and the test case in the attachment. The test case is thermocapillary motion of deformable drops in a vertical temperature gradient (no gravity), which follows the one reported in:

I tested the first problem in that paper (case of limit of zero marangoni number, page 161-162), and comparing my result with figure 1 (page 162).

Please kindly have a look at it and I would appreciate it if you could give comments, suggestions, help.



haghajani May 19, 2009 11:17

adding Temprature to les/interfoam
Dear Zaki,
Thanks for updating the thread,

I want to add temperature to les/interFoam?

The equation I am trying to add is;

I know that, a surfaceScalarField should be exist to update thermal conductivity in each time step
{Landa_eff = Landa + Cp*nuSgs()}, I have Les Turbulence Model as well.

To comply the Eq.2, should I modify a new library for Landa(Thermal conductivity), to call it in TEqn as twoPhaseProperties.landa(), or something else. I also tried with Creatfield and it didn't worked.

Please elaborate,


zakifoam May 19, 2009 12:01

Hi Hamed,

My questions & remarks:

1. Why do you need gamma in the energy equation (eq. 1) ?

2. Seems to me the terms in eq 2 are dimensionally inconsistent. I think they should be like this:

suppose landa = thermal conductivity, and alpha thermal diffusivity.

so alpha = landa/(rho*Cp)

landa_eff = landa + landa_sgs = landa + rho*Cp*alpha_sgs = landa + rho*Cp*nu_sgs / Pr_t

where Pr_t is the turbulent Prandtl number.

It is of course elegant to define landa (or its cell-face value landaf) in a new library. But I think you can also do it like this:

- define landa as volScalarField, also constants landa1 & landa2 for each fluid
- after calculating gamma, define landa = landa1*gamma + landa2*(1-gamma), also similarly with Cp
- before solving energy equation:

surfaceScalarField gammaf = fvc::interpolate(gamma);
surfaceScalarField landaf = fvc::interpolate(landa);

surfaceScalarField landaEff
+ fvc::interpolate(rho*Cp*turbulence->nuSgs()/Pr_t)

kind regards,


haghajani May 20, 2009 13:23

added TEqn to les/interfoam
1 Attachment(s)
Dear Zaki,
Thanks for your kind reply,

I saw the eq.(1) in a paper, Cryogenics 48 (2008) 238247, and have not understood why the autors chose the energy equation in that form. But I attached part of that paper to this thread. you can find it in eq.8;

I couldn't call turbulent Prandt number and the TEqn, as you suggested,I wrote is;
surfaceScalarField landaf = fvc::interpolate (landa);
surfaceScalarField landaEff
+ fvc::interpolate(rho*Cp*turbulence->nuSgs())

fvScalarMatrix TEqn
+ fvm::div(phi, T)
- fvm::laplacian(landaEff, T)


It is running on a case and I haven't checked the result yet,


FoEbrahimi August 24, 2014 03:24

how can i coding thermocapillary flows in a confined microchannel
with LBM method?

All times are GMT -4. The time now is 04:28.