Simulation of a single 20-bead linear chain

[1]:
import copy
import math
import numpy as np
import pandas as pd

script="""
MonteCarlo
Configuration cubic_side_length=30 particle_type=chain:/feasst/plugin/chain/particle/chain20.txt
Potential Model=LennardJones VisitModel=VisitModelIntra intra_cut=1
ThermoParams beta=1 chemical_potential=1
Metropolis
TrialAdd particle_type=chain
Run until_num_particles=1
Remove name=TrialAdd
TrialPivot tunable_param=20 max_length=8
TrialCrankshaft tunable_param=20 max_length=8
TrialGrowFile grow_file=grow_chain20.txt
Let [write]=trials_per_write=1e4 output_file=chain
Log [write].csv
Movie [write].xyz
Energy [write]_en.csv
CheckEnergy trials_per_update=1e4 decimal_places=8
Tune
Run num_trials=1e3
EndToEndDistance output_file=end_to_end2.csv
RadiusOfGyration output_file=rg2.csv
Run num_trials=1e5
"""

# create grow_chain20.txt
unit_grows = list()
grows=list()
length=20
max_length=19
for i in range(max_length):
     unit_grows.append("bond true mobile_site "+str(i)+" anchor_site "+str(i+1)+" num_steps 4\n")
     if i == 0:
         grows.append(unit_grows[-1])
     else:
         grows.append(unit_grows[-1] + copy.deepcopy(grows[-1]))
unit_grows = list()
for i in range(max_length):
    unit_grows.append("bond true mobile_site "+str(length-i-1)+" anchor_site "+str(length-i-2)+'\n')
    if i == 0:
        grows.append(unit_grows[-1])
    else:
        grows.append(unit_grows[-1] + copy.deepcopy(grows[-1]))
for ind, grow in enumerate(grows):
    grows[ind] = "weight "+str(1./len(grow))+" "+grows[ind]
    grows[ind] = "particle_type chain " + grows[ind]
with open('grow_chain20.txt', 'w') as file:
    file.write('TrialGrowFile\n\n')
    for grow in grows:
        file.write(grow+'\n')

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)
# Usage: /home/user/feasst/build/bin/fst < file.txt
FEASST version 0.25.13
MonteCarlo
Configuration cubic_side_length=30 particle_type=chain:/feasst/plugin/chain/particle/chain20.txt
Potential Model=LennardJones VisitModel=VisitModelIntra intra_cut=1
ThermoParams beta=1 chemical_potential=1
Metropolis
TrialAdd particle_type=chain
Run until_num_particles=1
# Initializing random number generator with seed: 1748976140
Remove name=TrialAdd
TrialPivot max_length=8 tunable_param=20
TrialCrankshaft max_length=8 tunable_param=20
TrialGrowFile grow_file=grow_chain20.txt
Log output_file=chain.csv trials_per_write=1e4
Movie output_file=chain.xyz trials_per_write=1e4
Energy output_file=chain_en.csv trials_per_write=1e4
CheckEnergy decimal_places=8 trials_per_update=1e4
Tune
Run num_trials=1e3
EndToEndDistance output_file=end_to_end2.csv
RadiusOfGyration output_file=rg2.csv
Run num_trials=1e5

 exit: 0
[2]:
rg=pd.read_csv('rg2.csv')
assert np.abs(np.sqrt(2.45) - rg['average'][0]) < 4*rg['block_stdev'][0]
end_to_end=pd.read_csv('end_to_end2.csv')
assert np.abs(2.92 - end_to_end['average'][0]) < 4*end_to_end['block_stdev'][0]
en=pd.read_csv('chain_en.csv')
assert np.abs(-29.4 - en['average'][0]) < 4*en['block_stdev'][0]

Did this tutorial work as expected? Did you find any inconsistencies or have any comments? Please contact us. Any feedback is appreciated!