1 A bit of context

In this exercise, we will see how to make a color plot of \(4\pi r^2\times G(r,t)\) data obtained from Molecular Dynamics simulations. These files can be downloaded here. These auto-correlators \(G(r,t)\) are obtained from MD trajectories of a fluid encapsulated in a porous medium by computing the probability that each molecule moves by a distance \(r\) over a time \(t\). The MD trajectories are performed with LAMMPS and the trajectories treated by a home-made C program producing these files.

In these simulations, we varied the depth of the interaction well. It is given in the name of the file such as Grt_xx.dat, where xx = 0.01, 0.1, 0.2, 0.3, 0.5, 0.8, 1 corresponds to \(\varepsilon/k_BT\). \(\varepsilon/k_BT\) is the depth of the interaction well in units of temperature.

The Grt_xx.dat files contain the \(4\pi r^2\times G(r,t)\) data under the form of a matrix, with \(r\) increasing with the rows and \(t\) with the columns. \(r\) goes from 0 to 20 Å and \(t\) goes from 0 to 200 ps.

2 Reading and tidying the data

We want to read all data files and store them into a tidy tibble for ease of plotting.

  • Load the tidyverse and ggplot2 packages
  • Find all files starting by “Grt” and store them in a vector Grt_files
  • Initiate an empty tibble Grt that will store all data
  • Using a for loop:
    • read the files
    • add columns names as the times values
    • add the r.A column containing the r values
    • and recursively (using the pipe %>%)
      • pivot the table to make it tidy, with the columns r.A, t.ps and r2Grt
      • make sure that the times are read as numeric values
      • add the epskt column containing the \(\varepsilon/k_BT\) value
    • store this in Grt

3 Plotting data

We should have a Grt dataset that looks like this:

## # A tibble: 2,815,407 x 4
##      r.A  t.ps      r2Grt epskt
##    <dbl> <dbl>      <dbl> <dbl>
##  1     0   0   77.7        0.01
##  2     0   0.1  0.000512   0.01
##  3     0   0.2  0.000203   0.01
##  4     0   0.3  0.000148   0.01
##  5     0   0.4  0.0000979  0.01
##  6     0   0.5  0.0000817  0.01
##  7     0   0.6  0.0000714  0.01
##  8     0   0.7  0.0000683  0.01
##  9     0   0.8  0.0000687  0.01
## 10     0   0.9  0.0000552  0.01
## # … with 2,815,397 more rows

We will now plot this as a colored heatmap using geom_raster from ggplot2:

  • We will first plot Grt only for times below 100 ps and \(\varepsilon/k_BT=0.5\), so recursively filter the data accordingly, then provide this to ggplot
  • Use a nicer axis labels
  • Do you see anything on the plot?
  • In fact, we need to saturate values above a certain limit in order to see the fine evolution of the \(G(r,t)\) auto-correlator. Add a mutation of the tibble attributing the limit value to all points above this limit, and play with the limit value in order to have a nicer plot.
  • Add a vertical dashed line in x=8.18Å marking the mean pore size for this structure.
  • Use a nicer color scheme with more colors in order to better see the variations.

Now we want to see the evolution of \(G(r,t)\) as a function of \(\varepsilon/k_BT\). Using the procedure above, plot \(G(r,t)\) for all \(\varepsilon/k_BT\) on a grid.

LS0tCnRpdGxlIDogIlIgRXhlcmNpc2VzIC0gRyhyLHQpIgpkYXRlICA6ICIyMDIwLTA3LTA3IgpvdXRwdXQ6IAogICAgaHRtbF9kb2N1bWVudDoKICAgICAgICB0b2MgICAgICAgICAgICA6IHRydWUKICAgICAgICB0b2NfZmxvYXQgICAgICA6IHRydWUKICAgICAgICB0b2NfZGVwdGggICAgICA6IDQKICAgICAgICBoaWdobGlnaHQgICAgICA6IHRhbmdvCiAgICAgICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCiAgICAgICAgY29kZV9kb3dubG9hZCAgOiB0cnVlCnBhcmFtczogCiAgICBzb2x1dGlvbjoKICAgICAgICB2YWx1ZTogdHJ1ZQotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFLCB3YXJuaW5nID0gRkFMU0UsIGNhY2hlPUZBTFNFfQpsaWJyYXJ5KHBsb3RseSkKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbXlfdGhlbWUgPC0gdGhlbWVfYncoKSsKICAgICAgICAgICAgdGhlbWUoYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNCxjb2xvdXI9ImJsYWNrIiksCiAgICAgICAgICAgICAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE0KSwKICAgICAgICAgICAgICAgICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplPTE0KSwKICAgICAgICAgICAgICAgICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE0LGNvbG91cj0iYmxhY2siKSwKICAgICAgICAgICAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNCxjb2xvdXI9ImJsYWNrIiksCiAgICAgICAgICAgICAgICAgIHBhbmVsLmJvcmRlciA9IGVsZW1lbnRfcmVjdChjb2xvdXIgPSAiYmxhY2siLCBmaWxsPU5BLCBzaXplPTEpLAogICAgICAgICAgICAgICAgICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICAgICBsZWdlbmQua2V5LmhlaWdodD11bml0KDEsImNtIiksCiAgICAgICAgICAgICAgICAgIGxlZ2VuZC5qdXN0aWZpY2F0aW9uID0gImNlbnRlciIsCiAgICAgICAgICAgICAgICAgIHN0cmlwLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgICAgICAgIHN0cmlwLnRleHQ9ZWxlbWVudF90ZXh0KHNpemUgPSAxNCksCiAgICAgICAgICAgICAgICAgIHN0cmlwLnRleHQueSA9IGVsZW1lbnRfdGV4dChhbmdsZT0wKSwKICAgICAgICAgICAgICAgICAgcGFuZWwuc3BhY2luZyA9IHVuaXQoMSwgImxpbmVzIikKICAgICAgICAgICAgICAgICAgKQp0aGVtZV9zZXQobXlfdGhlbWUpCmBgYAoKIyBBIGJpdCBvZiBjb250ZXh0CgpJbiB0aGlzIGV4ZXJjaXNlLCB3ZSB3aWxsIHNlZSBob3cgdG8gbWFrZSBhIGNvbG9yIHBsb3Qgb2YgJDRccGkgcl4yXHRpbWVzIEcocix0KSQgZGF0YSBvYnRhaW5lZCBmcm9tIE1vbGVjdWxhciBEeW5hbWljcyBzaW11bGF0aW9ucy4KVGhlc2UgZmlsZXMgY2FuIGJlIGRvd25sb2FkZWQgPGEgaHJlZj0iRGF0YS9HcnQuemlwIiBkb3dubG9hZCB0YXJnZXQ9Il9ibGFuayI+aGVyZTwvYT4uClRoZXNlIGF1dG8tY29ycmVsYXRvcnMgJEcocix0KSQgYXJlIG9idGFpbmVkIGZyb20gTUQgdHJhamVjdG9yaWVzIG9mIGEgZmx1aWQgZW5jYXBzdWxhdGVkIGluIGEgcG9yb3VzIG1lZGl1bSBieSBjb21wdXRpbmcgdGhlIHByb2JhYmlsaXR5IHRoYXQgZWFjaCBtb2xlY3VsZSBtb3ZlcyBieSBhIGRpc3RhbmNlICRyJCBvdmVyIGEgdGltZSAkdCQuIFRoZSBNRCB0cmFqZWN0b3JpZXMgYXJlIHBlcmZvcm1lZCB3aXRoIFtMQU1NUFNdKGh0dHBzOi8vbGFtbXBzLnNhbmRpYS5nb3YvKSBhbmQgdGhlIHRyYWplY3RvcmllcyB0cmVhdGVkIGJ5IGEgaG9tZS1tYWRlIEMgcHJvZ3JhbSBwcm9kdWNpbmcgdGhlc2UgZmlsZXMuCgpJbiB0aGVzZSBzaW11bGF0aW9ucywgd2UgdmFyaWVkIHRoZSBkZXB0aCBvZiB0aGUgaW50ZXJhY3Rpb24gd2VsbC4gSXQgaXMgZ2l2ZW4gaW4gdGhlIG5hbWUgb2YgdGhlIGZpbGUgc3VjaCBhcyBgR3J0X3h4LmRhdGAsIHdoZXJlIHh4ID0gMC4wMSwgMC4xLCAwLjIsIDAuMywgMC41LCAwLjgsIDEgY29ycmVzcG9uZHMgdG8gJFx2YXJlcHNpbG9uL2tfQlQkLiAkXHZhcmVwc2lsb24va19CVCQgaXMgdGhlIGRlcHRoIG9mIHRoZSBpbnRlcmFjdGlvbiB3ZWxsIGluIHVuaXRzIG9mIHRlbXBlcmF0dXJlLgoKVGhlIGBHcnRfeHguZGF0YCBmaWxlcyBjb250YWluIHRoZSAkNFxwaSByXjJcdGltZXMgRyhyLHQpJCBkYXRhIHVuZGVyIHRoZSBmb3JtIG9mIGEgbWF0cml4LCB3aXRoICRyJCBpbmNyZWFzaW5nIHdpdGggdGhlIHJvd3MgYW5kICR0JCB3aXRoIHRoZSBjb2x1bW5zLiAkciQgZ29lcyBmcm9tIDAgdG8gMjAgw4UgYW5kICR0JCBnb2VzIGZyb20gMCB0byAyMDAgcHMuCgojIFJlYWRpbmcgYW5kIHRpZHlpbmcgdGhlIGRhdGEKCldlIHdhbnQgdG8gcmVhZCBhbGwgZGF0YSBmaWxlcyBhbmQgc3RvcmUgdGhlbSBpbnRvIGEgdGlkeSB0aWJibGUgZm9yIGVhc2Ugb2YgcGxvdHRpbmcuCgotIExvYWQgdGhlIGB0aWR5dmVyc2VgIGFuZCBgZ2dwbG90MmAgcGFja2FnZXMKLSBGaW5kIGFsbCBmaWxlcyBzdGFydGluZyBieSAiR3J0IiBhbmQgc3RvcmUgdGhlbSBpbiBhIHZlY3RvciBgR3J0X2ZpbGVzYAotIEluaXRpYXRlIGFuIGVtcHR5IHRpYmJsZSBgR3J0YCB0aGF0IHdpbGwgc3RvcmUgYWxsIGRhdGEKLSBVc2luZyBhIGBmb3JgIGxvb3A6CiAgICAtIHJlYWQgdGhlIGZpbGVzCiAgICAtIGFkZCBjb2x1bW5zIG5hbWVzIGFzIHRoZSB0aW1lcyB2YWx1ZXMKICAgIC0gYWRkIHRoZSBgci5BYCBjb2x1bW4gY29udGFpbmluZyB0aGUgciB2YWx1ZXMKICAgIC0gYW5kIHJlY3Vyc2l2ZWx5ICh1c2luZyB0aGUgcGlwZSBgJT4lYCkgCiAgICAgICAgLSBwaXZvdCB0aGUgdGFibGUgdG8gbWFrZSBpdCB0aWR5LCB3aXRoIHRoZSBjb2x1bW5zIGByLkFgLCBgdC5wc2AgYW5kIGByMkdydGAKICAgICAgICAtIG1ha2Ugc3VyZSB0aGF0IHRoZSB0aW1lcyBhcmUgcmVhZCBhcyBudW1lcmljIHZhbHVlcwogICAgICAgIC0gYWRkIHRoZSBgZXBza3RgIGNvbHVtbiBjb250YWluaW5nIHRoZSAkXHZhcmVwc2lsb24va19CVCQgdmFsdWUKICAgIC0gc3RvcmUgdGhpcyBpbiBgR3J0YAoKCmBgYHtyIGluY2x1ZGU9cGFyYW1zJHNvbHV0aW9uLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGNhY2hlPUZBTFNFfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShnZ3Bsb3QyKQpHcnRfZmlsZXMgPC0gbGlzdC5maWxlcyhwYXR0ZXJuID0gIkdydF8iLCBwYXRoPSJEYXRhIikKR3J0ICAgICAgIDwtIHRpYmJsZSgpCmZvcihHcnRfZmlsZSBpbiBHcnRfZmlsZXMpeyNHcnRfZmlsZSA8LSBHcnRfZmlsZXNbMV0KICAgIGQgPC0gcmVhZF90YWJsZTIoZmlsZS5wYXRoKCJEYXRhIixHcnRfZmlsZSksIGNvbF9uYW1lcz1GQUxTRSkKICAgIG5hbWVzKGQpIDwtIGFzLmNoYXJhY3RlcihzZXEoMCwyMDAsIGxlbmd0aD1uY29sKGQpKSkKICAgIGQkci5BICAgIDwtIHNlcSgwLDIwLCBsZW5ndGg9bnJvdyhkKSkKICAgIGVwcyA8LSBnc3ViKCIuZGF0IiwiIixnc3ViKCJHcnRfIiwiIixHcnRfZmlsZSkpCiAgICBkIDwtIGQgJT4lIAogICAgICAgIHBpdm90X2xvbmdlcihjb2xzPS1yLkEsCiAgICAgICAgICAgICAgICAgICAgIG5hbWVzX3RvPSJ0LnBzIiwKICAgICAgICAgICAgICAgICAgICAgbmFtZXNfdHJhbnNmb3JtPWxpc3QodC5wcyA9IGFzLm51bWVyaWMpLAogICAgICAgICAgICAgICAgICAgICB2YWx1ZXNfdG89InIyR3J0IikgJT4lIAogICAgICAgIG11dGF0ZShlcHNrdD1hcy5udW1lcmljKGVwcykpCiAgICBHcnQgPC0gYmluZF9yb3dzKEdydCwgZCkKfQpgYGAKCiMgUGxvdHRpbmcgZGF0YQoKV2Ugc2hvdWxkIGhhdmUgYSBgR3J0YCBkYXRhc2V0IHRoYXQgbG9va3MgbGlrZSB0aGlzOgoKYGBge3IgaW5jbHVkZT1UUlVFLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGNhY2hlPUZBTFNFfQpHcnQKYGBgCgpXZSB3aWxsIG5vdyBwbG90IHRoaXMgYXMgYSBjb2xvcmVkIGhlYXRtYXAgdXNpbmcgYGdlb21fcmFzdGVyYCBmcm9tIGBnZ3Bsb3QyYDoKCi0gV2Ugd2lsbCBmaXJzdCBwbG90IGBHcnRgIG9ubHkgZm9yIHRpbWVzIGJlbG93IDEwMCBwcyBhbmQgJFx2YXJlcHNpbG9uL2tfQlQ9MC41JCwgc28gcmVjdXJzaXZlbHkgZmlsdGVyIHRoZSBkYXRhIGFjY29yZGluZ2x5LCB0aGVuIHByb3ZpZGUgdGhpcyB0byBgZ2dwbG90YAorIFVzZSBhIG5pY2VyIGF4aXMgbGFiZWxzCisgRG8geW91IHNlZSBhbnl0aGluZyBvbiB0aGUgcGxvdD8KKyBJbiBmYWN0LCB3ZSBuZWVkIHRvIHNhdHVyYXRlIHZhbHVlcyBhYm92ZSBhIGNlcnRhaW4gbGltaXQgaW4gb3JkZXIgdG8gc2VlIHRoZSBmaW5lIGV2b2x1dGlvbiBvZiB0aGUgJEcocix0KSQgYXV0by1jb3JyZWxhdG9yLiBBZGQgYSBtdXRhdGlvbiBvZiB0aGUgdGliYmxlIGF0dHJpYnV0aW5nIHRoZSBsaW1pdCB2YWx1ZSB0byBhbGwgcG9pbnRzIGFib3ZlIHRoaXMgbGltaXQsIGFuZCBwbGF5IHdpdGggdGhlIGxpbWl0IHZhbHVlIGluIG9yZGVyIHRvIGhhdmUgYSBuaWNlciBwbG90LgotIEFkZCBhIHZlcnRpY2FsIGRhc2hlZCBsaW5lIGluIHg9OC4xOMOFIG1hcmtpbmcgdGhlIG1lYW4gcG9yZSBzaXplIGZvciB0aGlzIHN0cnVjdHVyZS4KLSBVc2UgYSBuaWNlciBjb2xvciBzY2hlbWUgd2l0aCBtb3JlIGNvbG9ycyBpbiBvcmRlciB0byBiZXR0ZXIgc2VlIHRoZSB2YXJpYXRpb25zLgoKYGBge3IgaW5jbHVkZT1wYXJhbXMkc29sdXRpb24sIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZT1GQUxTRSwgY2FjaGU9RkFMU0V9CmxpbSAgICA8LSAwLjEKbmJyZWFrIDwtIDYKY29sb3JzIDwtIGNvbG9yUmFtcFBhbGV0dGUoYygid2hpdGUiLCJyb3lhbGJsdWUiLCJzZWFncmVlbiIsIm9yYW5nZSIsInJlZCIsImJyb3duIikpKDUwKQpHcnQgJT4lIAogICAgZmlsdGVyKHQucHM8PTEwMCwgZXBza3Q9PTAuNSkgJT4lIAogICAgbXV0YXRlKHIyR3J0PWlmZWxzZShyMkdydD5saW0sIGxpbSwgcjJHcnQpKSAlPiUgCiAgICBnZ3Bsb3QoYWVzKHg9ci5BLCB5PXQucHMsIGZpbGw9cjJHcnQpKSsKICAgICAgICBnZW9tX3Jhc3RlcigpKwogICAgICAgIGdlb21fdmxpbmUoYWVzKHhpbnRlcmNlcHQ9OC4xOCksIGx0eT0yKSsKICAgICAgICBzY2FsZV9maWxsX2dyYWRpZW50bigKICAgICAgICAgICAgY29sb3JzID0gY29sb3JzLCAKICAgICAgICAgICAgbmFtZSAgID0gJycsCiAgICAgICAgICAgIGJyZWFrcyA9IHNlcSgwLCBsaW0sIGxlbmd0aD1uYnJlYWspLCAKICAgICAgICAgICAgbGFiZWxzID0gYyhzZXEoMCwgbGltLCBsZW5ndGg9bmJyZWFrKVsxOihuYnJlYWstMSldLCBwYXN0ZSgiPiIsbGltKSkgCiAgICAgICAgKSArCiAgICAgICAgbGFicyh4ID0gInIgW8OFXSIsIHk9IlRpbWUgW3BzXSIpICsKICAgICAgICBzY2FsZV94X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApKSArIAogICAgICAgIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCkpCmBgYAoKCk5vdyB3ZSB3YW50IHRvIHNlZSB0aGUgZXZvbHV0aW9uIG9mICRHKHIsdCkkIGFzIGEgZnVuY3Rpb24gb2YgJFx2YXJlcHNpbG9uL2tfQlQkLiBVc2luZyB0aGUgcHJvY2VkdXJlIGFib3ZlLCBwbG90ICRHKHIsdCkkIGZvciBhbGwgCiRcdmFyZXBzaWxvbi9rX0JUJCBvbiBhIGdyaWQuCgpgYGB7ciBpbmNsdWRlPXBhcmFtcyRzb2x1dGlvbiwgd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlPUZBTFNFLCBjYWNoZT1GQUxTRX0KbGltICAgIDwtIDAuMQpuYnJlYWsgPC0gNgpjb2xvcnMgPC0gY29sb3JSYW1wUGFsZXR0ZShjKCJ3aGl0ZSIsInJveWFsYmx1ZSIsInNlYWdyZWVuIiwib3JhbmdlIiwicmVkIiwiYnJvd24iKSkoNTApCkdydCAlPiUgCiAgICBmaWx0ZXIodC5wczw9MTAwKSAlPiUgCiAgICBtdXRhdGUocjJHcnQ9aWZlbHNlKHIyR3J0PmxpbSwgbGltLCByMkdydCkpICU+JSAKICAgIGdncGxvdChhZXMoeD1yLkEsIHk9dC5wcywgZmlsbD1yMkdydCkpKwogICAgICAgIGdlb21fcmFzdGVyKCkrCiAgICAgICAgZ2VvbV92bGluZShhZXMoeGludGVyY2VwdD04LjE4KSwgbHR5PTIpKwogICAgICAgIHNjYWxlX2ZpbGxfZ3JhZGllbnRuKAogICAgICAgICAgICBjb2xvcnMgPSBjb2xvcnMsIAogICAgICAgICAgICBuYW1lICAgPSAnJywKICAgICAgICAgICAgYnJlYWtzID0gc2VxKDAsIGxpbSwgbGVuZ3RoPW5icmVhayksIAogICAgICAgICAgICBsYWJlbHMgPSBjKHNlcSgwLCBsaW0sIGxlbmd0aD1uYnJlYWspWzE6KG5icmVhay0xKV0sIHBhc3RlKCI+IixsaW0pKSAKICAgICAgICApICsKICAgICAgICBsYWJzKHggPSAiciBbw4VdIiwgeT0iVGltZSBbcHNdIikgKwogICAgICAgIHNjYWxlX3hfY29udGludW91cyhleHBhbmQgPSBjKDAsMCkpICsgCiAgICAgICAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSkgKwogICAgICAgIGZhY2V0X3dyYXAofmVwc2t0KQpgYGAKCg==