Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
# 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):
Exemplo n.º 3
0
    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()