.. _ethanol-adsorption-label:
Free energy profile
*******************
.. container:: hatnote
Free energy profile calculation using umbrella sampling and WHAM
.. figure:: ../figures/level3/adsorption-ethanol/video-avatar-light.webp
:alt: GROMACS tutorial : water ethanol mixture interface vacuum
:class: only-light
:height: 250
:align: right
.. figure:: ../figures/level3/adsorption-ethanol/video-avatar-dark.webp
:alt: GROMACS tutorial : water ethanol mixture interface with vacuum
:class: only-dark
:height: 250
:align: right
.. container:: justify
The objective of this tutorial is to use GROMACS to perform
a molecular simulation, and to calculate the free energy of adsorption
of ethanol at a liquid-vapor interface.
.. container:: justify
A liquid-vapor slab made of water and ethanol molecules is first
equilibrated under ambient conditions. Then, umbrella sampling is used
to probe the free energy profile of a chosen molecule across the
liquid-vapor interface.
.. include:: ../../non-tutorials/recommand-salt.rst
.. include:: ../../non-tutorials/needhelp.rst
.. include:: ../../non-tutorials/GROMACS2024.2.rst
Prepare the input files
=======================
.. container:: justify
Create 3 folders side-by-side named respectively *preparation/*, *adsorption/*,
and *singleposition/*. Go to *preparation/*.
.. container:: justify
Download the configuration files for the ethanol molecule from
the |ethanol_atb| (click on *All-Atom PDB (optimised geometry)*),
and place the file |BIPQ_allatom_optimised_geometry.pdb| in the *preparation/* folder.
.. |BIPQ_allatom_optimised_geometry.pdb| raw:: html
BIPQ_allatom_optimised_geometry.pdb
.. |ethanol_atb| raw:: html
ATB repository
Create the configuration file
-----------------------------
.. container:: justify
First, let us convert the pdb file into a gro file
consisting of a single ethanol molecule at the center
of a small box using the *gmx trjconv* command:
.. code-block:: bash
gmx trjconv -f BIPQ_allatom_optimised_geometry.pdb -s BIPQ_allatom_optimised_geometry.pdb -box 0.8 0.8 0.8 -o single_ethanol.gro -center
.. container:: justify
Select *system* for both centering and output.
Replicate the ethanol molecule
------------------------------
.. container:: justify
To create a system with several ethanol molecules, let us replicate
the single molecule (4x4x4 times) using *genconf*:
.. code-block:: bash
gmx genconf -f single_ethanol.gro -o replicated_ethanol.gro -nbox 4 4 4
.. container:: justify
If you open the *replicated_ethanol.gro* file with VMD,
you will see the replicated ethanol molecules.
.. figure:: ../figures/level3/adsorption-ethanol/replicated-ethanol-light.png
:alt: Gromacs HBC (graphene) molecule after minimisation in water
:class: only-light
:height: 450
.. figure:: ../figures/level3/adsorption-ethanol/replicated-ethanol-dark.png
:alt: Gromacs HBC (graphene) molecule after minimisation in water
:class: only-dark
:height: 450
.. container:: figurelegend
Figure: Replicated ethanol molecules with carbon atoms in
gray, oxygen atoms in red, and hydrogen atoms in white.
Create the topology file
------------------------
.. container:: justify
Within the *preparation/* folder, create a folder named *ff/*.
.. container:: justify
From the same page from the ATB repository, download the file named
|GROMACS_G54A7FF.itp| and place within *ff/*.
Download as well the GROMACS top file named |Gromacs4.5.x-5.x.x54a7.itp|
containing most of the force field parameters. Finally, copy
the |ethanol_h2o.itp| file for the water molecules in the *ff/* folder.
.. |GROMACS_G54A7FF.itp| raw:: html
GROMACS G54A7FF All-Atom (ITP file)
.. |Gromacs4.5.x-5.x.x54a7.itp| raw:: html
Gromacs 4.5.x-5.x.x 54a7
.. |ethanol_h2o.itp| raw:: html
h2o.itp
.. container:: justify
Create a blank file named *topol.top* within the
*preparation/* folder, and copy the following lines in it:
.. code-block:: bw
#include "ff/gromos54a7_atb.ff/forcefield.itp"
#include "ff/BIPQ_GROMACS_G54A7FF_allatom.itp"
#include "ff/h2o.itp"
[ system ]
Ethanol molecules
[ molecules ]
BIPQ 64
Add the water
-------------
.. container:: justify
Let us add water molecules. First download the tip4p
water configuration file |ethanol-tip4p.gro|
and copy it in the *preparation/* folder. Then, in
order to add (tip4p) water molecules to both gro and
top files, use the gmx solvate command as follows:
.. |ethanol-tip4p.gro| raw:: html
here
.. code-block:: bash
gmx solvate -cs tip4p.gro -cp replicated_ethanol.gro -o solvated.gro -p topol.top
.. container:: justify
In my case, 858 water molecules with residue name
*SOL* were added.
.. container:: justify
There should be a new line *SOL 858* in the topology
file *topol.top*:
.. code-block:: bash
[ molecules ]
BIPQ 64
SOL 858
.. container:: justify
The created *solvated.gro* file contains the positions
of both ethanol and water molecules, it looks like this:
.. figure:: ../figures/level3/adsorption-ethanol/solvated-light.png
:alt: GROMACS tutorial : Ethanol molecules in water with VMD
:class: only-light
:height: 450
.. figure:: ../figures/level3/adsorption-ethanol/solvated-dark.png
:alt: GROMACS tutorial : Ethanol molecules in water with VMD
:class: only-dark
:height: 450
.. container:: figurelegend
Figure: Replicated ethanol molecules surrounded by water (in light blue color).
.. container:: justify
To create a liquid-vapor slab, let
us increase the box size along the *x* direction to
create a large vacuum area:
.. code-block:: bash
gmx trjconv -f solvated.gro -s solvated.gro -box 20.0 3.2 3.2 -o solvated_vacuum.gro -center
.. container:: justify
Select *system* for both centering and output.
.. container:: justify
Alternatively, download the *solvated_vacuum.gro* file I
have generated by clicking |ethanol-solvated_vacuum| and continue with
the tutorial.
.. |ethanol-solvated_vacuum| raw:: html
here
Energy minimization
===================
.. container:: justify
Create a new folder in the preparation/' folder, call
it 'inputs', and save the |ethanol-min.mdp|
and the |ethanol-nvt.mdp| files into it.
.. |ethanol-min.mdp| raw:: html
min.mdp
.. |ethanol-nvt.mdp| raw:: html
nvt.mdp
.. container:: justify
These 2 files have been seen in the previous
tutorials. They contain the GROMACS commands, such
as the type of solver to use, the temperature, etc.
Apply the minimization to the solvated box using :
.. code-block:: bash
gmx grompp -f inputs/min.mdp -c solvated_vacuum.gro -p topol.top -o min -pp min -po min -maxwarn 1
gmx mdrun -v -deffnm min
.. container:: justify
Here the '-maxwarn 1' allows us to perform the
simulation despite GROMACS' warning about some issue
with the force field. Let us visualize the atoms' trajectories during the
minimization step using VMD by typing:
.. code-block:: bash
vmd solvated_vacuum.gro min.trr
.. container:: justify
During energy minimization, the
molecules move until the forces between the atoms are
reasonable.
.. figure:: ../figures/level3/adsorption-ethanol/video-min-light.webp
:alt: GROMACS tutorial : Ethanol molecules during minimisation
:class: only-light
:height: 450
.. figure:: ../figures/level3/adsorption-ethanol/video-min-dark.webp
:alt: GROMACS tutorial : Ethanol molecules during minimisation
:class: only-dark
:height: 450
.. container:: figurelegend
Figure: Movie showing the motion of the atoms during the
energy minimization. The two fluid/vacuum interfaces
are on the left and or the right sides, respectively.
.. admonition:: Note for VMD users
:class: info
You can avoid having
molecules *cut in half* by the periodic boundary
conditions by rewriting the trajectory using:
.. code-block:: bash
gmx trjconv -f min.trr -s min.tpr -o min_whole.trr -pbc whole
Equilibration
=============
.. container:: justify
Starting from the minimized configuration, let us
perform an NVT equilibration for 100 ps in order to let
the system reaches equilibrium:
.. code-block:: bash
gmx grompp -f inputs/nvt.mdp -c min.gro -p topol.top -o nvt -pp nvt -po nvt -maxwarn 1
gmx mdrun -v -deffnm nvt
.. container:: justify
When its done, extract the ethanol density profile
along x using the following command:
.. code-block:: bash
gmx density -f nvt.xtc -s nvt.tpr -b 50 -d X -sl 100 -o density_end_ethanol.xvg
.. container:: justify
and choose 'non_water' for the ethanol. The '-b 50'
keyword is used to disregard the 50 first
picoseconds of the simulation, the '-d X' keyword to
generate a profile along x, and the '-sl 100'
keyword to divide the box into 100 frames. Repeat
the procedure to extract the water profile as well.
.. admonition:: Warning: small equilibration time
:class: info
The current equilibration time for the
NVT run (100 ps) is too small. Such a short time was chosen to
make the tutorial possible to follow regardless of your computational resources.
Increase the duration to 1 nanosecond for a well-equilibrated system.
Alternatively, download the final configuration I
have obtained after a 1 ns run by clicking |ethanol-nvt_1ns.gro|.
.. |ethanol-nvt_1ns.gro| raw:: html
here
.. container:: justify
The n is :
.. figure:: ../figures/level3/adsorption-ethanol/position-light.png
:alt: GROMACS tutorial : Density profile water and ethanol
:class: only-light
.. figure:: ../figures/level3/adsorption-ethanol/position-dark.png
:alt: GROMACS tutorial : Density profile water and ethanol
:class: only-dark
.. container:: figurelegend
Figure: Water (blue) and ethanol (gray) density profiles along the :math:`x` axis.
These density profiles were obtained during the last 500 picoseconds of a
1 nanosecond long run.
.. container:: justify
The density profiles show an excess of
ethanol at the 2 interfaces, which is commonly observed :cite:`stewart2003molecular`.
There is also a local maxima in the water density near the center of the fluid
layer (near :math:`x = 3~\text{nm}`), and two depletion areas in between the center
of the fluid layer and the two interfaces.
Imposed forcing
===============
.. container:: justify
To calculate the free energy profile across the liquid/vapor interface,
one needs to impose an additional harmonic potential on one ethanol
molecule and force it to explore the box along the :math:`x` axis..
.. container:: justify
As a test, let us first apply the protocol to force the ethanol molecule
to remain in one given single position. All the remaining
positions will be calculated in the next part of this tutorial.
.. container:: justify
Within *singleposition/*, create a folder named
*inputs/*, and copy |ethanol-min.mdp-2|, |ethanol-nvt.mdp-2|
and |ethanol-pro.mdp-2| in it.
.. |ethanol-min.mdp-2| raw:: html
min.mdp
.. |ethanol-nvt.mdp-2| raw:: html
nvt.mdp
.. |ethanol-pro.mdp-2| raw:: html
pro.mdp
.. container:: justify
In all 3 *.mdp* files, there are the following lines:
.. code-block:: bw
pull = yes
pull-nstxout = 1
pull-ncoords = 1
pull-ngroups = 2
pull-group1-name = ethanol_pull
pull-group2-name = water
pull-coord1-type = umbrella
pull-coord1-geometry = distance
pull-coord1-dim = Y N N
pull-coord1-groups = 1 2
pull-coord1-start = no
pull-coord1-init = 2
pull-coord1-rate = 0.0
pull-coord1-k = 1000
.. container:: justify
These lines specify the additional harmonic potential to be applied
between a group named *ethanol_pull* (still to be defined) and
*water*. The spring constant of the harmonic
potential is :math:`k = 1000~\text{kJ/mol/nm}^2`, and the requested
distance between the center-of-mass of the two
groups is :math:`2~\text{nm}` along
the :math:`x` axis.
.. container:: justify
Copy as well the previously created *topol.top* file within
*singleposition/*, and modify the first lines to adapt the path to the
force field folder:
.. code-block:: bw
#include "../preparation/ff/gromos54a7_atb.ff/forcefield.itp"
#include "../preparation/ff/BIPQ_GROMACS_G54A7FF_allatom.itp"
#include "../preparation/ff/h2o.itp"
.. container:: justify
Let us create an index file:
.. code-block:: bash
gmx make_ndx -f ../preparation/nvt.gro -o index.ndx
.. container:: justify
Then, type:
.. code-block:: bw
a 2
name 6 ethanol_pull
.. container:: justify
Press *q* to save and exit. These commands create an
index file containing, alongside default groups, a group named *ethanol_pull*
made of only 1 atom: the atom with index 2. This atom
is the oxygen atom of the first ethanol molecule in
the list.
.. container:: justify
You can ensure that the atom of
index 2 is indeed an oxygen atom that beyond to an ethanol molecule by
looking at the top of the *nvt.gro* (or *nvt_1ns.gro*) file:
.. code-block:: bw
Ethanol molecules in water
4008
1BIPQ H6 1 1.679 0.322 1.427 -1.2291 -2.8028 -0.6705
1BIPQ O1 2 1.617 0.317 1.501 -0.1421 -0.1303 0.4816
1BIPQ C2 3 1.549 0.441 1.496 -0.4726 -0.1734 0.4272
1BIPQ H4 4 1.453 0.450 1.548 -0.2059 -0.1001 0.9069
1BIPQ H5 5 1.529 0.454 1.390 -0.7133 0.0381 0.4988
1BIPQ C1 6 1.641 0.548 1.542 0.1500 -0.4454 -0.2006
1BIPQ H1 7 1.600 0.646 1.516 0.5688 -0.5292 -1.1624
1BIPQ H2 8 1.734 0.549 1.486 -1.4595 1.2268 -2.9589
1BIPQ H3 9 1.652 0.548 1.651 -2.4175 0.8229 0.1142
(...)
.. container:: justify
Run all 3 inputs successively using GROMACS:
.. code-block:: bash
gmx grompp -f inputs/min.mdp -c ../preparation/nvt_1ns.gro -p topol.top -o min -pp min -po min -maxwarn 1 -n index.ndx
gmx mdrun -v -deffnm min
gmx grompp -f inputs/nvt.mdp -c min.gro -p topol.top -o nvt -pp nvt -po nvt -maxwarn 1 -n index.ndx
gmx mdrun -v -deffnm nvt
gmx grompp -f inputs/pro.mdp -c nvt.gro -p topol.top -o pro -pp pro -po pro -maxwarn 1 -n index.ndx
gmx mdrun -v -deffnm pro
.. container:: justify
During minimization, the ethanol molecule is separated
from the rest of the fluid until the distance between
the center-of-mass of the 2 groups is 2 nm.
.. figure:: ../figures/level3/adsorption-ethanol/video-pulled-light-2.webp
:alt: GROMACS tutorial : ethanol molecule being pulled
:class: only-light
:height: 400
.. figure:: ../figures/level3/adsorption-ethanol/video-pulled-dark-2.webp
:alt: GROMACS tutorial : ethanol molecule being pulled
:class: only-dark
:height: 400
.. container:: figurelegend
Figure: Ethanol molecule being pulled from the rest of the
fluid during minimization and NVT equilibration.
.. container:: justify
Then, during the production run, the average distance
between the 2 groups is measured over time.
.. figure:: ../figures/level3/adsorption-ethanol/probability-light.png
:alt: GROMACS tutorial : Probability distribution of the distance
:class: only-light
.. figure:: ../figures/level3/adsorption-ethanol/probability-dark.png
:alt: GROMACS tutorial : Probability distribution of the distance
:class: only-dark
.. container:: figurelegend
Figure: Probability distribution of the distance between the
two center-of-mass. Short (50 ps) and long (1.5 ns)
runs are compared.
.. container:: justify
Here, a longer run has been added for comparison.
If you have the computational resources, feel free to run longer
production runs than 50 ps.
.. container:: justify
Note that the distribution is not centered around :math:`x = 2~\text{nm}`.
This is expected as the interactions between the pulled ethanol molecule and the
rest of the fluid are shifting away from the average position of the
ethanol molecule from the center of harmonic potential.
Free energy profile calculation
===============================
.. container:: justify
Let us replicate the previous calculation for 30 distances,
from :math:`x = 0` (i.e. the center of the
liquid slab) to :math:`x = 4~\text{nm}` (far within the vacuum phase).
Within the folder called *adsorption/*, create an *inputs/* folder, and copy
|ethanol-min.mdp-3|, |ethanol-nvt.mdp-3|, and |ethanol-pro.mdp-3|, in it.
.. |ethanol-min.mdp-3| raw:: html
min.mdp
.. |ethanol-nvt.mdp-3| raw:: html
nvt.mdp
.. |ethanol-pro.mdp-3| raw:: html
pro.mdp
.. container:: justify
The only difference with the previous input scripts is the command:
.. code-block:: bash
pull-coord1-init = to_be_replaced
.. container:: justify
Here, the keyword *to_be_replaced* is to be systematically replaced by the
right number using the bash script below.
.. container:: justify
Create a new bash script called *run.sh* with *adsorption/*, and copy
the following lines in it:
.. code-block:: bash
#!/bin/bash
set -e
for ((i = 0 ; i < 30 ; i++)); do
x=$(echo "0.13*$(($i+1))" | bc);
sed 's/to_be_replaced/'$x'/g' inputs/min.mdp > min.mdp
gmx grompp -f min.mdp -c ../preparation/nvt_1ns.gro -p topol.top -o min.$i -pp min.$i -po min.$i -maxwarn 1 -n index.ndx
gmx mdrun -v -deffnm min.$i
sed 's/to_be_replaced/'$x'/g' inputs/nvt.mdp > nvt.mdp
gmx grompp -f nvt.mdp -c min.$i.gro -p topol.top -o nvt.$i -pp nvt.$i -po nvt.$i -maxwarn 1 -n index.ndx
gmx mdrun -v -deffnm nvt.$i
sed 's/to_be_replaced/'$x'/g' inputs/pull.mdp > pull.mdp
gmx grompp -f pull.mdp -c nvt.$i.gro -p topol.top -o pull.$i -pp pull.$i -po pull.$i -maxwarn 1 -n index.ndx
gmx mdrun -v -deffnm pull.$i
done
.. container:: justify
Copy the previously created index file and topology
file within the *adsorption/* folder, and execute
the bash script.
.. container:: justify
When the simulation is done, create 2 files
by typing in the terminal (credit to the |gaseri_site|):
.. |gaseri_site| raw:: html
gaseri site
.. code-block:: bash
ls prd.*.tpr > tpr.dat
ls pullf-prd.*.xvg > pullf.dat
.. container:: justify
Finally, perform the analysis using the *gmx wham* command
of GROMACS:
.. code-block:: bash
gmx wham -it tpr.dat -if pullf.dat
.. container:: justify
A file named *profile.xvg* has been created. It
contains a potential of mean force (PMF).
.. figure:: ../figures/level3/adsorption-ethanol/PMF-light.png
:alt: GROMACS tutorial : PMF for the ethanol molecule
:class: only-light
.. figure:: ../figures/level3/adsorption-ethanol/PMF-dark.png
:alt: GROMACS tutorial : PMF for the ethanol molecule
:class: only-dark
.. container:: figurelegend
Figure: PMF for the ethanol molecule across the interface
between a water/ethanol liquid slab and vapor.
.. container:: justify
The durations of 100 ps used in this tutorial
are too short to obtain a smooth and reliable PMF curve. Increase
the duration of the production runs to a few
nanoseconds for reasonable results.
.. container:: justify
The PMF shows a plateau inside the bulk liquid (:math:`x<1~\text{nm}`),
a minimum at the interface (:math:`x=1.5~\text{nm}`), and increase in the
vapor phase (:math:`x>1.5~\text{nm}`). The minimum at the interface indicate that
ethanol favorably adsorb at the liquid/vapor interface, which is
consistent with the density profile.
.. container:: justify
The PMF also indicates that once adsorbed,
the ethanol molecule requires an energy of about :math:`5~\text{kJ/mol}`
to re-enter the liquid phase (see blue curve), which is about
:math:`2.2~k_\text{B} T`.
.. container:: justify
Finally, the PMF shows that it is energetically costly for the
ethanol molecule to fully desorb and go into the
vacuum phase as the energy barrier to overcome is at
least :math:`25~\text{kJ/mol}`. Consistently, when performing unbiased MD
simulation, it is relatively rare to observe an ethanol molecule exploring the vapor phase.
.. include:: ../../non-tutorials/accessfile.rst