def __init__(self, poly=None, melt_id=1): """Define empty lists. Inputs: poly: polymer object with set values. melt_id: id number of current melt object. """ # box sizes self.sidelen = [100, 100, 100] self.build_sidelen = [100, 100, 100] # id number self.melt_id = melt_id # polymer instance if poly != None: self.p = poly else: self.p = polymer() # final arrays for writing self.coeff = None self.value = {"atom": [], "bond": [], "angle": [], "dihedral": [], "improper": []} # set build parameters self.set_build_number(1, 1, 1)
# dihedral properties di_e = [0.7003,0.4995,-6.501,-13.002] di_d = [1,1,1,1] di_n = [3,2,2,2] # improper properties im_e = [4.995,4.995] im_d = [1,1] im_n = [2,3] # set nmonomers nmonomers = 10 # make an instance of the molecule c = polymer(nmonomers) # set box dimensions c.set_box_size(100) # set range (which monomers to set mtype1 = range(1,nmonomers+1) # define atom, bond, and dihedral types for i in range(4): c.define_type('atom',[mass[i]],mtype1) c.define_type('bond',[bond_e[i],bond_d[i],aspaces[i]],mtype1) c.define_type('dihedral',[di_e[i],di_d[i],di_n[i]],mtype1) # define pair types for j in range(i,4):
def move(self, obstacles, monomers,fixed, polymers, num): obs=0 v1=0 v2=0 #if the monomer is not in a polymer if self.ispoly==0: for i in xrange(constant.NB_OBS): if self.near(obstacles[i], constant.CONTACT_OBS)==1: v1=v1+obstacles[i].v1-self.v1 v2=v2+obstacles[i].v2-self.v2 obs+=1 for y in xrange(constant.NB_MONO): if y!=num: # if self.near(monomers[y], CONTACT_MONO)==1: # v1=v1+monomers[y].v1-self.v1 # v2=v2+monomers[y].v2-self.v2 # obs+=1 if self.near(monomers[y], constant.CONTACT_POL)==1: #if the monomer self hits is already the head of a polymer if monomers[y].ishead==1: polymers[monomers[y]].add(monomers[num],polymers) #print "HAAAAAAAAA" # new=polymers[y] # new.append(y) # polymers[num]=new # del polymers[y] # self.ispoly=1 # monomers[y].ishead=num #if the monomer self hits is alone elif monomers[y].ispoly==0: polymers[monomers[num]]=polymer.polymer(monomers[num],monomers[y],polymers) #print monomers[num].ishead #print polymers.has_key(monomers[num]) else: v1=v1+monomers[y].v1-self.v1 v2=v2+monomers[y].v2-self.v2 obs+=1 #if the monomer didn't hit anything, then random movment if obs==0: self.move_random() #else, take into consideration objects hit elif obs!=0: self.v1_next=v1/obs self.v2_next=v2/obs # norm=math.sqrt(self.v1_next*self.v1_next+self.v2_next*self.v2_next) # self.v1_next=self.v1_next*(constant.SPEED+10)/norm # self.v2_next=self.v2_next*(constant.SPEED+10)/norm # if fix!=0: # norm=math.sqrt(self.v1*self.v1+self.v2*self.v2) # self.v1_next=self.v1_next*(constant.SPEED+10)/norm # self.v2_next=self.v2_next*(constant.SPEED+10)/norm fix=0 for j in xrange(constant.NB_FIX): if self.near(fixed[j],constant.CONTACT_FIX)==1: self.v1_next=-self.v1 self.v2_next=-self.v2 fix=1 self.wind()