36 lines
894 B
Python
36 lines
894 B
Python
|
#!/usr/bin/env python
|
||
|
from math import sqrt
|
||
|
from util import readFile, writeFile
|
||
|
import sys
|
||
|
from getopt import getopt
|
||
|
from state import State
|
||
|
import numpy as np
|
||
|
from matplotlib import pyplot as plt
|
||
|
from constants import k_B, m
|
||
|
|
||
|
def main(argv):
|
||
|
if len(argv) != 4:
|
||
|
print(f'{argv[0]} <number of particles> <side length> <temperature>')
|
||
|
sys.exit(2)
|
||
|
|
||
|
state = State(
|
||
|
count=int(argv[1]),
|
||
|
size=float(argv[2]),
|
||
|
temperature=float(argv[3])
|
||
|
)
|
||
|
|
||
|
state.molecules = np.hstack([np.random.rand(state.count, 3)*state.size, np.zeros((state.count, 3))])
|
||
|
|
||
|
state.minimize()
|
||
|
|
||
|
sigma = sqrt(k_B*state.temperature/m)
|
||
|
state.molecules[:,3:6] = np.random.multivariate_normal([0,0,0], np.eye(3)*sigma, state.count)
|
||
|
|
||
|
avg = np.sum(state.molecules[:,3:6], 0)
|
||
|
state.molecules[:,3:6] -= avg / state.count
|
||
|
|
||
|
writeFile('./res/initial.mol', state)
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
main(sys.argv)
|