Diffusion constant, viscosity and size effects
When simulating liquids or solids under periodic boundary conditions, we are making two fundamental approximations:
- We simulate an infinite system, thus neglecting the fact that any real-world system is finite. This approximation becomes problematic, when the real-world system to be studied consists only of a few simulation cells.
- We impose the condition that the properties of the system under study repeat exactly from one simulation cell to the next. The quality of this approximation depends on the system under study and the quantity of interest.
Here, we want to calculate the diffusion constant of water at room temperature ($T=300\,\text{K}$). Since we are interested in a property of bulk water, we don't need to worry about the first approximation. But we need to pay attention to the second one. The theory derived in 10.1021/jp0477147 allows us to estimate the finite size effects in the diffusion constant $D_{pbc}(L)$, calculated under periodic boundary conditions with cell size $L$. With this information at hand, we will be able to extrapolate the results for finite cell sizes to the diffusion constant $D=\lim\limits_{L\rightarrow \infty}D_{pbc}(L)$, effectively getting rid of the second approximation.
Calculating transport properties typically requires lots of sampling. Start the MD simulation for 32 water molecules and see how far you can get (aim at least for 200 ps).
- While the job is running, check the output of CP2K to verify that all is fine. What is the average temperature?
- We want to simulate diffusion at room temperature. Why aren't we using the $NVT$ ensemble? Hint: Think about how thermostats work.
- Use the provided script
./get_t_sigma file.ener
to calculate the standard deviation of the temperature for your simulation as well as for the provided simulations of larger cells containing 64, 128 and 256 water molecules. - How are temperature fluctuations expected to depend on system size? Use gnuplot's fitting functionality to check whether they follow the corresponding law. Hint: See e.g. "Understanding Molecular Simulations" by Frenkel and Smit, sections 4.1 and 6.2. (2P)
The mean squared displacement (msd) is defined as $$\text{msd}(t) = \langle |r(t+t_0)-r(t_0)|^2 \rangle$$ where the average $\langle ... \rangle$ runs over all particles in the system.
Our simulations are not large enough to obtain reasonable statistics just from averaging over all water molecules.
We therefore perform an additional average over the time $t_0$: $\text{msd}(t)$ is calculated as an average over all non-overlapping time windows of width $t$ that fit into the total simulation time $T$.
We have provided a Fortran program that uses this algorithm to extract the msd from a trajectory in a .xyz
file.
gfortran msd.f90 -o msd.x # compile msd.x executable ./msd.x < msd.in # check input file 'msd.in' before you run!
Per default, msd.x
writes the msd in units of $\unicode{x212B}^2$ as a function of time in fs.
Once you have calculated the msd, have a look into section III of the article on how to fit the diffusion constant.
- We have precalculated trajectories for 64, 128 and 256 water molecules (ask your teaching assistant). Use
msd.x
to calculate the msd, modifyingmsd.in
as needed. Note:msd.x
may run up to 30 minutes for the largest cell. - Plot the msd as a function of time on a double logarithmic scale. Can you identify different regimes? Why does the signal become noisy towards long times? (2P)
- Obtain the diffusion constant $D_{pbc}$ by fitting a line through the mean square displacement data in the range $2-10$ ps.
- Compare against the values in Table I of the article. Note: We are using a slightly different force field, but the values should be of a similar magnitude. If not, check your units!
When your MD of the 32 water molecules has finished (for example on the next day), you can start fitting the diffusion constant.
- Calculate $D_{PBC}(L)$ also for the 32 water molecules.
- Plot $D_{PBC}$ as a function of $1/L$, where $L$ is the length of the edge of the simulation box.
- Perform a linear fit of this curve to obtain the diffusion constant $D=D_{pbc}(L=\infty)$
- Use equation (12) in the article to calculate the viscosity $\eta$ from the slope of $D_{PBC}(1/L)$.
- Compare the results to the data in the paper.