Calculation of interfacial tension between two phases

GROMACS version: 2021.4
GROMACS modification: Yes/No
Here post your question
I want to study the effect of surfactants in the reduction of interfacial tension between the oil and water. How can I calculate the interfacial tension between these two phases?


Easiest way is to simulate your equilibrated system with phase interface normals pointing along Z. Then calculate it with gmx energy: select the #Surf*SurfTen term and divide by the number of interfaces in your system (that’s the #Surf part of the selected term).


1 Like

I have a silica slab over which I added a few hydrocarbon molecules and ran an equilibration to adsorb the oil over the silica surface. Now I added a few surfactants to study its effect on reducing the interfacial tension between water and oil. Here the slab is in the xy plane over which I have the oil, water and surfactant molecules in the Z direction. Should I run another simulation (in NPT conditions), because I have only done an NVT run?
Another thing, what should I as pcoupletype if I want to run NPT? should it be anisotropic or surface-tension?
Actually I tried both of them with the compressibility same as that of water ( as I do not have any experimental data available), but the simulation crashed with segmentation fault. Also in anisotropic pcoupletype, I use 0 in compressibility for the offdiagonal elements (xz, xy, yx…etc) in P tensor matrix.

This is a complicated system to measure interfacial tension for. You’ll need to measure the oil–water, water–silica and oil–silica tensions separately. For fluid-to-fluid interfaces you can use the method above with NPT. When measuring with the silica I’m not sure what the best way is, I don’t think the same method works (it would depend on how exactly your silica is created, whether you use restraints, etc). You can put a droplet on your silica and measure how it spreads out, then use the Young equation for wetting to estimate it.

When adding surfactants you can use these same methods after adding them to your interface, but this again becomes complicated.

Use whatever your final system will use. Do you need anisotropic compared to isotropic which is simpler? Not surface-tension, which fixes the tension to a set value which is not what you want.

Segmentation faults are usually due to the system having overlapping atoms or huge force spikes at the beginning. Have you run energy minimization and a short pre-equilibration after adding your components?

I just want to study the interfacial tension between oil and water after adding the surfactant. Actually I am comparing the activity of a series of surfactants and hence, I will just need the IFT values of water-oil interfaces for the set of surfactants and determine which one reduces the IFT more effectively.

Actually I am not sure, a few of the papers that I have referred to uses Pzz tensor value to determine the interfacial tensions. I am posting the link for that paper here for your reference. Although the work has been done on LAMMPS but I think a similar procedure works in GROMACS as well.

Yes I have done energy minimization with a maximum force of 100 kj/mol/nm. Following that I have done a 10 ns NVT equilibration.

Then running gmx energy with your equilibrium simulation of oil + water + surfactants and using the #Surf*SurfTen term should give you the value (after dividing by #Surf, as mentioned above).

Indeed this is what Gromacs uses with gmx energy to calculate the tension. It can also print the tensor components individually if you want to compute the tension manually.

Instead of anisotropic you can also use semiisotropic, where you only have to specify for xy (as one) and z, instead of 6 components.

So it crashes once you change to NPT from your NVT-equilibrated system? Does it also crash if you just change to NPT but with isotropic coupling? I don’t expect using the compressibility of water for your oil is the culprit. If you keep having this issue it would be good to see your md.log file and if any warnings are written.

Hi Gaurav,
There are two ways to calculate the surface tension. If there is only liquid in your system, then run your simulation in the NVT ensemble (the final step after equilibration). Calculate the pressure in X, Y, and Z direction and use the surface tension formula (σMD=0.5Lz[⟨Pzz⟩−0.5(⟨Pxx⟩+⟨Pyy⟩)]) to calculate it with some normalization if required.

If you have a silica surface and liquid interface, then there are many ways to calculate it. You need to search papers where people have done this kind of calculation. As I remember the MOLD integration method can be used to do this calculation for this kind of system.

There is no direct way available to calculate surface tension for a complex system!
Hope this will help!

Actually I haven’t come across any paper yet that uses IFT calculations in presence of a silica slab. All of them have a mixture of oil-surfactant and water or oil-water and some other component (ions maybe). So I am not sure how I can implement this into my study.

If I use just a mixture of substance, like Oil-water and surfactant, then I have only one interface right? just the oil and water? that means #surf is 1 here and I do not have to divide the #Surf*SurfTen with anything.

No I haven’t done the isotropic coupling yet. I will give it a try and will you know if it works or fails

I read about the MOLD integration and it generates an interface by reversibly creating a crystal from a fluid at coexistence conditions. But in my case, the slab and the fluid above it are made up of different substances. Hence, I cannot use this algorithm to calculate the interfacial tension between oil and water in presence of surfactants when the oil was previously made to adsorb over the silica surface.

Except if your system is connected with periodic boundary conditions along z (which it should be), then you have two interfaces total. But each oil-to-water + surfactants interface should count for one only.

I tried without the silica slab. Then I don’t think I need to perform an NPT run. There is only oil-water and surfactants. Hence just the NVT run followed by #Surf*SurfTen will do?