Is there a reference for Suzuki-Yoshida weights? #273
-
|
While making the batched version of Nosé Hoover NVT integrator, I discovered the higher order integration using Suzuki Yoshida weights. I was a bit surprised to see float values hard coded, instead of the numerical expression. Despite at many references given in torchsim, jax-md and openMM and gromacs, I did not find any papers reporting the exact same values in these softwares: SUZUKI_YOSHIDA_WEIGHTS = {
1: [1],
3: [0.828981543588751, -0.657963087177502, 0.828981543588751],
5: [0.2967324292201065, 0.2967324292201065, -0.186929716880426,
0.2967324292201065, 0.2967324292201065],
7: [0.784513610477560, 0.235573213359357, -1.17767998417887,
1.31518632068391, -1.17767998417887, 0.235573213359357,
0.784513610477560]
}Only in Gromacs they actually provide the expression: What is surprising is that ASE and related papers rather provide these values:
FOURTH_ORDER_COEFFS = [
1 / (2 - 2 ** (1 / 3)),
-(2 ** (1 / 3)) / (2 - 2 ** (1 / 3)),
1 / (2 - 2 ** (1 / 3)),
]So everything is similar in the expression up to a negative sign in the exponent, which changes everything. In the end, I don't think they are any difference in the implementation (jax-md and torch sim are similar as it was an inspiration, ase is similar although I may be wrong). Is there any reason for this difference? In the paper it's ASE version that is given. Actually if one closely looks at Suzuki-Yoshida method, it's supposed to provide around terms 3**n (actually less as some terms can be factorised) to get a 2n order integrator. Here it seems to be only 2n-1 terms. Do you have the derivation of these weights? References:
|
Beta Was this translation helpful? Give feedback.
Replies: 3 comments 3 replies
-
|
I believe these were copied from jax-md which we're copied from open-mm. Neither of those references fully assign back to literature. I will send off a message to the person on the OpenMM team who originally implemented their nose-hoover and see if they can help trace this back to an earlier ground truth |
Beta Was this translation helpful? Give feedback.
-
|
@CompRhys is right. I won't say it's lost in time. The derivation and weights can be found in - Statistical Mechanics: Theory and Molecular Simulation Section 4.12 by Tuckerman and they match with what all the packages have (TorchSim, OpenMM etc). |
Beta Was this translation helpful? Give feedback.
-
|
Ok thanks for the reference. Looking at it at Section 4.11 (Integrating the Nose-Hoover chain equations), equation (4.11.12) indeed provide the decomposition SUZUKI_YOSHIDA_WEIGHTS[7] in Torch Sim. The book provide a decomposition in 4th order with 3 or 5 terms but they are not the ones used in openMM, jax-md, torchsim or gromacs: While, these constants are used in these MD codes: By the way, I actually did not notice but as you said the 6th order derivation was provided in Yoshida 1990 paper and is the one used in the MD codes. I was confused as it's written in scientific notation and only write w_1, w_2, w_3 (See Solution A of Table 1). Also, while I understand that SUZUKI_YOSHIDA_WEIGHTS[7] is a 6th order integrator for L_NH, as far as I understand, SUZUKI_YOSHIDA_WEIGHTS 3 and 5 should both be 4th order integrator. Are they any other difference then? It seems like 4th order with 3 decomposition should always be preferred compared to the 5 terms for efficiency reasons. For instance, in gromacs, they actually force the use of the 5 terms. In ASE, they force the use of 3 terms (with actually the weights provided by Yoshida). |
Beta Was this translation helpful? Give feedback.
Ok thanks for the reference. Looking at it at Section 4.11 (Integrating the Nose-Hoover chain equations), equation (4.11.12) indeed provide the decomposition SUZUKI_YOSHIDA_WEIGHTS[7] in Torch Sim. The book provide a decomposition in 4th order with 3 or 5 terms but they are not the ones used in openMM, jax-md, torchsim or gromacs:
The book uses
for n=3, w0 = w2 = 1 /(2−2^(1/3)), w1 = 1 − 2w0
for n=5, w0 = w1 = w3 = w4 = 1/(4−4^(1/3)), w1 = 1-4w0
While, these constants are used in these MD codes:
for n=3, w0 = w2 = 1/(2-2^-(1/3)), w1 = 1-2w0
for n=5, w0 = w1 = w3 = w4 = 1/(4-4^-(1/3)), w1 = 1-4w0
By the way, I actually did not notice but as you said the 6th order derivation was provided in…