Ejemplo n.º 1
0
    def create_mons(self):
        # """creates monomers along an axis"""
        curr_id = self.nnodes # the last position of atoms (nodes)
        # its also the first position of mons
        mons_list = [None]*(self.npoly - 1)
        for neigh in self.neighs:
            a1 = self.nodes[neigh.i]
            a2 = self.nodes[neigh.j]
            xyz_, bond_length = distances.mons_alng_line(a1.position, a2.position, self.npoly, self.box)
            for i, xyz in enumerate(xyz_):
                curr_id += 1
                mons_list[i] = Atom("O", m=1.0)
                mons_list[i].q = -1.
                mons_list[i].position = xyz
                mons_list[i].idx = curr_id
                mons_list[i].ityp = 2
                if i < (self.npoly - 2):
                    self.bonds.append(Bond(curr_id, curr_id + 1, bond_length))
            self.bonds.append(Bond(a1.idx, mons_list[0].idx, bond_length))
            self.bonds.append(Bond(a2.idx, mons_list[-1].idx, bond_length))
            self.mons.extend(mons_list)

            # now connecting the atoms with pbc
            # if a1.nneighs < 4:
            #     for node in self.nodes:
            #         if node.nneighs < 4:
            #             d_pbc = distances.dist_w_pbc(a1.position, node.position, self.box)
            #             if np.allclose(d_pbc, self.rcut) < self.eps and a1.idx != node.idx:
            #                 self.bonds.append(Bond(a1.idx, node.idx, d_pbc))
            #                 a1.neighbors.append(node.idx - 1)
            #                 node.neighbors.append(a1.idx - 1)

        return None
Ejemplo n.º 2
0
    def create_mons(self):
        """creates monomers along an axis"""
        shift_idx = self.nparticles
        _curr_id = shift_idx  # the last position of atoms (nodes)
        chaincount = 0
        _m_mons = 1.
        for neigh in self.neighs:

            chaincount += 1
            a1 = self.nodes[neigh.i]
            a2 = self.nodes[neigh.j]
            npolychain = self.npoly
            mons_list = [None] * (npolychain - 1)

            if self.rand_walk_chain:
                xyz_vec, bond_length = distances.chain_alng_line(
                    a1.position, a2.position, npolychain, self.box)
            else:
                xyz_vec, bond_length = distances.mons_alng_line(
                    a1.position, a2.position, npolychain, self.box)
            self.ionization_count += 1

            for i, xyz in enumerate(xyz_vec):
                _curr_id += 1
                mons_list[i] = Atom("O", m=_m_mons)
                self.ionization_count += 1
                if (self.ionization_count % self.ionization_every == 0):
                    mons_list[i].q = -1 * (abs(self.valency))
                mons_list[i].position = xyz
                mons_list[i].idx = _curr_id
                mons_list[i].ityp = 2
                mons_list[i].chainnum = chaincount
                if i < (npolychain - 2):
                    self.bonds.append(Bond(_curr_id, _curr_id + 1,
                                           bond_length))
            if (self.ionization_count % self.ionization_every == 0):
                mons_list[i].q = -1 * (abs(self.valency))
            self.ionization_count += 1

            self.bonds.append(Bond(a1.idx, mons_list[0].idx, bond_length))
            self.bonds.append(Bond(a2.idx, mons_list[-1].idx, bond_length))
            self.mons.extend(mons_list)
            self.nmons = len(list(self.mons))
        self.number_of_chains = chaincount
        self.name_species.append('mons')
        self.species.append(self.mons)
        self.nspecies.append(self.nmons)
        self.mspecies.append(float(_m_mons))
        return None
    def create_mons(self):
        """creates monomers along an axis"""
        shift_idx = self.nparticles
        _curr_id = shift_idx  # the last position of atoms (nodes)
        chaincount = 0
        _m_mons = 1.
        print("nnodes", len(self.nodes))
        print("nnodes", (self.nnodes))

        all_nodes = self.nodes + self.termnodes
        for neigh in self.neighs:

            chaincount += 1
            if self.verbose:
                print("i-j", neigh.i - 1, neigh.j - 1)
            a1 = all_nodes[neigh.i - 1]
            a2 = all_nodes[neigh.j - 1]
            # for _n in self.nodes:
            #     if _n.idx == neigh.i:
            #         a1 = _n
            #         continue
            #     elif _n.idx == neigh.j:
            #         a2 = _n
            #         continue
            # if (a1.ityp == 2) or (a2.ityp == 2):
            #     print( "here is the tether")
            #     print( a1.idx)
            #     print( a2.idx)
            # a1 = self.nodes[neigh.i]
            # a2 = self.nodes[neigh.j]
            npolychain = self.npoly
            mons_list = [None] * (npolychain - 1)

            if a1.position[0] < self.box[0] / 2.:
                self.ionization_every = self.ionization_every_left
            elif a1.position[0] >= self.box[0] / 2.:
                self.ionization_every = self.ionization_every_right

            if self.rand_walk_chain:
                xyz_vec, bond_length = distances.chain_alng_line(
                    a1.position, a2.position, npolychain, self.box)
            else:
                xyz_vec, bond_length = distances.mons_alng_line(
                    a1.position, a2.position, npolychain, self.box)
            self.ionization_count += 1

            for i, xyz in enumerate(xyz_vec):
                _curr_id += 1
                mons_list[i] = Atom("O", m=_m_mons)
                self.ionization_count += 1
                if (self.ionization_count % self.ionization_every == 0):
                    mons_list[i].q = -1 * (abs(self.valency))
                mons_list[i].position = xyz
                mons_list[i].idx = _curr_id
                mons_list[i].ityp = 3
                mons_list[i].chainnum = chaincount
                if i < (npolychain - 2):
                    self.bonds.append(Bond(_curr_id, _curr_id + 1,
                                           bond_length))
            if (self.ionization_count % self.ionization_every == 0):
                mons_list[i].q = -1 * (abs(self.valency))
            self.ionization_count += 1

            self.bonds.append(Bond(a1.idx, mons_list[0].idx, bond_length))
            self.bonds.append(Bond(a2.idx, mons_list[-1].idx, bond_length))
            self.mons.extend(mons_list)
            # self.nmons = len(list(self.mons))
        self.number_of_chains = chaincount
        self.name_species.append('mons')
        self.species.append(self.mons)
        self.nspecies.append(self.nmons)
        self.mspecies.append(float(_m_mons))
        return None