Second virial coefficient calculation of TraPPE ethane using Mayer-Sampling
Here, we reproduce the virial coefficient of TraPPE ethane
Table 6 of https://doi.org/10.1021/jp972543+ reports −73 +/- 1 ml/mol at 423.2K
[1]:
params={"beta": 1./423.2} # 1/K
script="""
MonteCarlo
Configuration cubic_side_length 1e100 particle_type0 ethane_with_ref.fstprt \
add_particles_of_type0 2 cutoff 1e4 \
group0 first first_particle_index 0
Potential Model LennardJones
RefPotential Model HardSphere sigma0 4 sigma1 0
ThermoParams beta {beta}
MayerSampling
TrialTranslate new_only true reference_index 0 tunable_param 0.1 group first
TrialRotate new_only true reference_index 0 tunable_param 40
set_variable trials_per 1e5
CriteriaWriter trials_per_write trials_per output_file ethane_b2.txt
Log trials_per_write trials_per output_file ethane.txt
Movie trials_per_write trials_per output_file ethane.xyz
# tune trial parameters
Tune
Run num_trials 1e5
RemoveModify name Tune
# equilibrate
Run num_trials 1e6
# production
MayerSampling
Run num_trials 1e7
""".format(**params)
with open('script2.txt', 'w') as file: file.write(script)
import subprocess
syscode = subprocess.call("../../../build/bin/fst < script2.txt > script2.log", shell=True, executable='/bin/bash')
with open('script2.log', 'r') as file: print(file.read(), '\n', 'exit:', syscode)
# FEASST version: v0.19.0-104-gc3a7e003a2-dirty-user/newtutorials
Configuration add_particles_of_type0 2 cubic_side_length 1e100 cutoff 1e4 first_particle_index 0 group0 first particle_type0 ethane_with_ref.fstprt
Potential Model LennardJones
RefPotential Model HardSphere sigma0 4 sigma1 0
ThermoParams beta 0.0023629489603024575
MayerSampling
TrialTranslate group first new_only true reference_index 0 tunable_param 0.1
TrialRotate new_only true reference_index 0 tunable_param 40
CriteriaWriter output_file ethane_b2.txt trials_per 1e5
Log output_file ethane.txt trials_per 1e5
Movie output_file ethane.xyz trials_per 1e5
Tune
Run num_trials 1e5
# initializing random number generator with seed: 1653572948
RemoveModify name Tune
Run num_trials 1e6
MayerSampling
Run num_trials 1e7
exit: 0
[3]:
import math
import unittest
class TestMayerSamplingTraPPEethane(unittest.TestCase):
def test(self):
with open("ethane_b2.txt") as f:
firstline = f.readline().rstrip()
#print(firstline)
b2=eval(firstline)
print(b2)
b2hs = 2./3.*math.pi*3.75**3 # A^3
b2hs *= 1e-30*1e3*1e3*6.02214076E+23 # L/mol
print('b22(L/mol)', b2hs*b2['second_virial_ratio'])
print('b22_block_stdev(L/mol)', b2hs*b2['second_virial_ratio_block_stdev'])
self.assertAlmostEqual(-63, b2hs*b2['second_virial_ratio'],
delta=20*b2hs*b2['second_virial_ratio_block_stdev'])
unittest.main(argv=[''], verbosity=2, exit=False)
test (__main__.TestMayerSamplingTraPPEethane) ...
{'second_virial_ratio': -0.908299, 'second_virial_ratio_block_stdev': 0.00480318}
b22(L/mol) -60.41324381361913
b22_block_stdev(L/mol) 0.319471544525205
ok
----------------------------------------------------------------------
Ran 1 test in 0.002s
OK
[3]:
<unittest.main.TestProgram at 0x7fe7d825e670>
Did this tutorial work as expected? Did you find any inconsistencies or have any comments? Please contact us. Any feedback is appreciated!