-
Notifications
You must be signed in to change notification settings - Fork 2
/
softWall.py
29 lines (26 loc) · 1 KB
/
softWall.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from forceField import ForceField
from vector import *
from copy import copy,deepcopy
class SoftWall:
def __init__(self,args):
ForceField.__init__(self)
self.f=float(args[0])/2
self.L=float(args[1])
def Accelerate(self,atoms):
if len(atoms)==2:
pass
elif len(atoms)==1:
atom=atoms[0]
pot_energy=0
acc=Vector(atom.acceleration.dim)
for i in range(atom.coords_t.dim):
if atom.coords_t[i]>self.L:
acc[i]=-2*(self.f)*(atom.coords_t[i]-self.L)
pot_energy+=self.f*((self.L-atom.coords_t[i])**2)
elif atom.coords_t[i]<-self.L:
acc[i]=-2*(self.f)*(self.L+ atom.coords_t[i])
pot_energy+=self.f*((self.L+atom.coords_t[i])**2)
atom.acceleration+=acc*(1/atom.mass)
atom.p_energy+=pot_energy
else:
sys.exit('Soft Wall potential gets 1 atom')