
[Sponsors] 
OpenFOAM141dev A new implementation of dynamicKistlerGammaContactAngle 

LinkBack  Thread Tools  Display Modes 
November 13, 2008, 06:56 
Dear all,
I would like to s

#1 
Member
Edin Berberovic
Join Date: Mar 2009
Posts: 31
Rep Power: 8 
Dear all,
I would like to share the implementation of a new boundary condition of dynamic contact angle for interFoam aplication. It is based on the investigations of Hoffman, firstly introduced by Kistler(1993) through a Hoffman function. Details can be found in: @InCollection{Kistler93, author = {Stephan F. Kistler}, title = {Hydrodynymics of Wetting}, booktitle = {Wettability}, pages = {311429}, publisher = {Marcel Dekker Inc.}, year = {1993}, editor = {John C. Berg}, chapter = {6}, } Basically, one of the problems in assigning an expression for the dynamic contact angle (in addition to modelling the contact line velocity) seems to be the appearance of a static contact angle. The static contact angle shows a hysteresis, and is therefore not single valued. In order to overcome this difficulty, a term is introduced in the function for the dynamic contact angle, through which the influence of the static contact angle is absorbed. The function is of the form, Kistler(1993): thetaD = F_hoff(Ca + F_hoff<sup>1</sup>(theta0)), where the symbols are : thetaD – dynamic contact angle, F_hoff – the function of Hoffman, Ca – Capillary number based on the contact line velocity, F_hoff<sup>1</sup> – inverse of the function of Hoffman, theta0  advancing or receding contact angle (depending on the advancing or receding motion). The function must be solved iteratively due to the appearance of the inverse of the function as one of its own arguments. In the implementation, a C++ function object is introduced defining the inverse Hoffman function, which is solved using RiddersRoot (src/ODE/findRoot). ThetaD is then evaluated using Ca number and the value of F_hoff<sup>1</sup>. The Ca number is evaluated using the existing model for contact line velocity from dynamicContactAngle in OpenFOAM. The interFoam application is slightly modified. The createFields.H containes initialization of mixture viscosity and surface tension coefficient, which are passed as volScalarFields to the dynamicKistlerContactAngle class. The mixture viscosity is updated during time steps. The application with the new dynamicKistlerContactAngle class and a sample damBreak case are here: and a couple of snapshots from damBreak case (on a still relatively coarse grid): This model for the dynamic contact angle (but with another simpler model for contact line velocity) has been successively used in other numerical codes in predictions of drop impact. Examples can be found in: @Article{Sikalo_etal05, author = {S. Sikalo and H. D. Wilhelm and I. V. Roisman and S. Jakirlic and C. Tropea}, title = {Dynamic contact angle of spreading droplets: experiments and simulations}, journal = {Physics of Fluids}, year = {2005}, volume = {17}, number = {6}, pages = {62103}, } @Article{Roisman_etal08, author = {I. V. Roisman and L. Opfer and C. Tropea and M. Raessi and J. Mostaghimi and S. Chandra}, title = {Drop impact onto a dry surface: Role of the dynamic contact angle}, journal = {Colloids and Surfaces A}, year = {2008}, volume = {322}, pages = {183191}, } I am aware that this might not be the most elegant or general way of implementation. Therefore any further suggestions for improvement are welcome. With kind regards, Edin Berberovic. 

November 13, 2008, 07:10 
Sorry, the files were too larg

#2 
Member
Edin Berberovic
Join Date: Mar 2009
Posts: 31
Rep Power: 8 
Sorry, the files were too large for upload.
Here is the interFoam solver with only the part containing the dynamicKistlerGammaContactAngle class. It should be put into transportModels/interfaceProperties/gammaContactAngle/dynamicKistlerGammaContactAngle interFoamKistler.tgz damBreak_thetaA_115.tgz 

November 13, 2008, 09:50 
Hi Edin ,
I am also implement

#3 
New Member
Gerard Mouokue
Join Date: Mar 2009
Location: Darmstadt, Hessen, Germany
Posts: 16
Rep Power: 8 
Hi Edin ,
I am also implementing some models of dynamic contact angle in Openfoam . why you didn t use interfaceproperties.C in your model thanks gerard 

November 13, 2008, 10:24 
Dear Gerard,
I didn't want

#4 
Member
Edin Berberovic
Join Date: Mar 2009
Posts: 31
Rep Power: 8 
Dear Gerard,
I didn't want to create any objects of type interfaceProperties within the class of type ...FvPatchScalarField just in order to get some data from them. In such case, I believe I would have to use also the twoPhaseProperties objects. I wanted to pass the values for mu and sigma from the application itself (interFoam). Therefore I used as a basis the implementation of totalPressure BC. Regards, Edin. 

November 13, 2008, 10:57 
Dear Edin ,
I thank you for y

#5 
New Member
Gerard Mouokue
Join Date: Mar 2009
Location: Darmstadt, Hessen, Germany
Posts: 16
Rep Power: 8 
Dear Edin ,
I thank you for your fast answer . you know in interfaceproperties.C the contact angle ist corrected (correctgammacontactangle)at each time step . where did you correct it in your inplementation wenn you don t use interfaceproperties. thanks gerard 

November 13, 2008, 12:00 
Dear Gerard,
OK, now I see

#6 
Member
Edin Berberovic
Join Date: Mar 2009
Posts: 31
Rep Power: 8 
Dear Gerard,
OK, now I see what you are asking. Yes, I do use the same function from interfaceProperties.C to correct the contact angle. What I did is the following: I derived the dynamicKistlerGammaContactAngleFvPatchScalarField from gammaContactAngleFvPatchScalarField, the same way as the existing dynamicGammaContactAngleFvPatchScalarField was derived. The same function correctContactAngle from interfaceProperties.c is used. Only the way how thetaD is calculated has changed (I had to put in a function object and make use of RiddersRoot) as well as the way of passing the arguments to the constructor of dynamicKistlerGammaContactAngleFvPatchScalarField. I did not make it global, I copied the transportModels folder from src into my interFoam application folder, and made an additional folder called dynamicKistlerGammaContactAngle within. This is what I wanted to post here, but it was to large, so if you want I can email it to you. Regards, Edin. 

November 13, 2008, 12:25 
Dear Edin,
I am really happy

#7 
New Member
Gerard Mouokue
Join Date: Mar 2009
Location: Darmstadt, Hessen, Germany
Posts: 16
Rep Power: 8 
Dear Edin,
I am really happy to have discussed it with you . it would be very nice if you can sent it to me . I have a last question to you . in your code you say if uwall>0 theta0 = thetaR if uwall<0 theta0 = thetaA is that not the opposite? thanks Gerard email mongerard2000@yahoo.fr 

November 14, 2008, 00:17 
Hello Edin,
Thanks for shar

#8 
Member
a a saha
Join Date: Mar 2009
Posts: 67
Rep Power: 8 
Hello Edin,
Thanks for sharing your implementation on dynamic contact angle in interFoam. I have the following question: Will it be possible to modify the equation for dyanamic contact angle in your implementation with the following equation tan(theta) = a*Ca^(1/3)  b*(lambda)^0.04*Ca^0.293; a = 7.48, b = 3.28, lambda = 10E8, Ca = Capillary number I would be extremely happy to hear from you in this regard. Thanks again. A A Saha. 

November 14, 2008, 04:46 
Gerard,
No, I believe that

#9 
Member
Edin Berberovic
Join Date: Mar 2009
Posts: 31
Rep Power: 8 
Gerard,
No, I believe that this is correct. This is the most general approach I could make using the exsisting model for contact line velocity in OpenFOAM. uwall (small u) is evaluated as a dot product of nWall and Uwall. nWall is calculated using nHat by subtracting from it the component normal to the wall. So nWall is parallel to the wall and points into liquid (due to normalized grad(gamma) in nHat). Similarly, Uwall is calculated by taking U from the first cell near the wall and subtracting its normal component. So Uwall is also parallel to the wall, but points in the direction of motion. Now if the liquid advances, these two vectors point in opposite sides, and if the liquid recedes the point to the same side. Therefore the advancing motion is determined by uwall<0>0. I also put in some lines to print out all these values at the wall. Uncomment them and you will see that this is correct at the wall. Saha, I think this should not be a problem. After you calculate the Ca number, you can simply use your expression for theta. In this case you will not need any function objects, since, as far as I can see, this is an ordinary linear equation which you can evaluate directly (i.e. by theta = arctan(...)). So, remove the function object I put in, and simply replace the expression for theta. Regards, Edin. 

November 14, 2008, 04:49 
Sorry for the mistype:
Now if

#10 
Member
Edin Berberovic
Join Date: Mar 2009
Posts: 31
Rep Power: 8 
Sorry for the mistype:
Now if the liquid advances, these two vectors point in opposite sides, and if the liquid recedes they point to the same side. Therefore the advancing motion is determined by uwall<0>0. 

November 14, 2008, 04:51 
The advancing motion is determ

#11 
Member
Edin Berberovic
Join Date: Mar 2009
Posts: 31
Rep Power: 8 
The advancing motion is determined by uwall<0.
The receding motion is determined by uwall>0. 

November 14, 2008, 09:49 
Hello Edin,
I would appreci

#12 
Member
a a saha
Join Date: Mar 2009
Posts: 67
Rep Power: 8 
Hello Edin,
I would appreciate if you can share you code and send the same to asaha@pec.edu. Thanks, a a saha 

October 12, 2009, 22:51 

#13 
Member
Eelco Gehring
Join Date: Mar 2009
Posts: 70
Rep Power: 8 
First, this is a nice addition to the OF code. Second, I am trying to get this code to work with OF 1.5. I am getting some errors regarding the llduSolver. Did anybody successfully implement this?
Thanks for the help! 

July 20, 2010, 14:59 

#14 
Member
Join Date: Nov 2009
Posts: 48
Rep Power: 8 
Hello Edin,
thanks for sharing your information. I could not open your files. Would you please share your code again or is it possible to help me to implement the new one? farhangi.mehran@gmail.com Last edited by farhagim; August 2, 2010 at 17:11. 

November 4, 2014, 06:45 

#15 
New Member
Join Date: May 2014
Posts: 1
Rep Power: 0 
I try to implement Kistler's dynamic contact angle model in OpenFOAM 2.3.0. With a few changes in Edin's files, I almost could get it work.
Can anybody send me his implementation and particularly the files of a case? uaecf@student.kit.edu Thanks a lot! 

August 20, 2015, 11:24 

#16 
New Member
Yaoyina
Join Date: Sep 2014
Posts: 4
Rep Power: 3 
Hello Edin,
thanks for sharing your information. I could not use your files to implement the Kistler model in OF2.3.0. Would you please share your code again or is it possible to help me to implement the new one? Thank you very much! yaoyn14@mails.tsinghua.edu.cn 

Thread Tools  
Display Modes  


Similar Threads  
Thread  Thread Starter  Forum  Replies  Last Post 
Installing OpenFoam141dev vtk errors  cvv  OpenFOAM Installation  0  February 11, 2009 03:54 
SpaceVaryingGammaContactAngle in OpenFOAM141dev  asaha  OpenFOAM Running, Solving & CFD  0  January 23, 2009 11:16 
OpenFOAM141dev linking error on IBM AIX 52  matthias  OpenFOAM Installation  24  April 28, 2008 15:49 
Sample utility problem in OpenFOAM141dev  7islands  OpenFOAM Bugs  1  January 4, 2008 09:34 
CoupledFvScalarMatrix in OpenFOAM141dev  oleg_weinstein  OpenFOAM Installation  6  December 13, 2007 14:16 