示例#1
0
    def energy_i(self, posits):
        
        params          =   self.params
        cutoff          =   self.cutoff
        #posits_ext      =   extend_structure(posits.copy(), self.pbc, self.cell)
        #layer_indices   =   self.layer_indices
        layer_neighbors =   self.layer_neighbors
        chem_symbs      =   self.chem_symbs
        
        e_KC            =   np.zeros(len(posits))
        
        for i, ri in enumerate(posits):
            if chem_symbs[i] == 'C':
                ni              =   local_normal(i, posits, layer_neighbors, accept_noneighbor = self.no_edge_neighbor)
                
                ni          =   -1*ni
                nj          =   np.array([0., 0., 1.])    
                

                                         
                neigh_orig  =   get_setOrig(ri, self.edge, self.bond)
                neigh_pos   =   self.neigh_set + neigh_orig
            
                for rj in neigh_pos: 
                        
                    e, new_maps     =   get_potential_ij(ri, rj, ni, nj, posits, i, params, \
                                                 cutoff) 
            
                    if new_maps != None:    self.map_seqs   =   new_maps
                    
                    e_KC[i]       +=  e

        return e_KC
示例#2
0
    def energy_i(self, posits):

        params = self.params
        cutoff = self.cutoff
        #posits_ext      =   extend_structure(posits.copy(), self.pbc, self.cell)
        #layer_indices   =   self.layer_indices
        layer_neighbors = self.layer_neighbors
        chem_symbs = self.chem_symbs

        e_KC = np.zeros(len(posits))

        for i, ri in enumerate(posits):
            if chem_symbs[i] == 'C':
                ni = local_normal(i,
                                  posits,
                                  layer_neighbors,
                                  accept_noneighbor=self.no_edge_neighbor)

                ni = -1 * ni
                nj = np.array([0., 0., 1.])

                neigh_orig = get_setOrig(ri, self.edge, self.bond)
                neigh_pos = self.neigh_set + neigh_orig

                for rj in neigh_pos:

                    e, new_maps     =   get_potential_ij(ri, rj, ni, nj, posits, i, params, \
                                                 cutoff)

                    if new_maps != None: self.map_seqs = new_maps

                    e_KC[i] += e

        return e_KC
示例#3
0
    def forces_on_posArr(self, split_beg, pos_arr,  af1, af2, af3, dnGreat, \
                             posits, layer_neighbors, \
                             chem_symbs, params, cutoff, natoms):

        nj = np.array([0., 0., 1.])
        dnj = np.array([[0., 0., 0], [0., 0., 0], [0., 0., 0]])

        for l, ri in enumerate(pos_arr):
            i = l + split_beg
            if chem_symbs[i] == 'C':  # SHREAR ADD

                ni_f = local_normal(i,
                                    posits,
                                    layer_neighbors,
                                    accept_noneighbor=self.no_edge_neighbor)
                dni_f = dnGreat[i]

                ni = -1 * ni_f
                dni = -dni_f

                neigh_orig = get_setOrig(ri, self.edge, self.bond)
                neigh_pos = self.neigh_set + neigh_orig

                for rj in neigh_pos:

                    # Force due to atom j on atom i
                    fij     =   get_forces_ij(ri, rj, ni, nj, dni, dnj, \
                                              posits, i, params, \
                                              cutoff, no_edge_neighbor = self.no_edge_neighbor) #, layer_neighbors = layer_neighbors)

                    af1[i] += fij[0]
                    af2[i] += fij[1]
                    af3[i] += fij[2]
示例#4
0
 def nj(xi, *args):
     i                       =   args[0]
     
     posits_use              =   positions.copy()
     posits_use[ind, i]      =   xi
     #posits_ext_use          =   extend_structure(posits_use.copy(), pbc, cell)
            
     nj                      =   local_normal(ind, posits_use, layer_neighbors, \
                                              accept_noneighbor = no_edge_neighbor)
             
     return nj
示例#5
0
    def nj(xi, *args):
        i = args[0]

        posits_use = positions.copy()
        posits_use[ind, i] = xi
        #posits_ext_use          =   extend_structure(posits_use.copy(), pbc, cell)

        nj                      =   local_normal(ind, posits_use, layer_neighbors, \
                                                 accept_noneighbor = no_edge_neighbor)

        return nj
示例#6
0
    def e(rik, *args):
        k               =   args[0]
        posits_use      =   posits.copy()   
        posits_use[i,k] =   rik
        ri              =   posits_use[i]
        #posits_ext      =   extend_structure(posits_use, pbc, cell)

        ni          =   local_normal(i, posits, layer_neighbors, accept_noneighbor = no_edge_neighbor)*(-1)
        nj          =   np.array([0.,0.,1.])
        
        
        return get_potential_ij(ri, rj, ni, nj, posits_use, i, params, cutoff)
示例#7
0
    def e(rik, *args):
        k = args[0]
        posits_use = posits.copy()
        posits_use[i, k] = rik
        ri = posits_use[i]
        #posits_ext      =   extend_structure(posits_use, pbc, cell)

        ni = local_normal(
            i, posits, layer_neighbors,
            accept_noneighbor=no_edge_neighbor) * (-1)
        nj = np.array([0., 0., 1.])

        return get_potential_ij(ri, rj, ni, nj, posits_use, i, params, cutoff)
示例#8
0
 def energy_on_posArr(self, k, split_len, pos_arr, e_KCm, \
                          posits, layer_neighbors, 
                          chem_symbs, params, cutoff, natoms):
     
     nj          =   np.array([0., 0., 1.])    
             
     for l, ri in enumerate(pos_arr):
         i   =   l  + split_len 
         if chem_symbs[i] == 'C': # SHEAR ADD
             ni          =   local_normal(i, posits, layer_neighbors, accept_noneighbor = self.no_edge_neighbor)
             ni          =   -1*ni
                 
             neigh_orig  =   get_setOrig(ri, self.edge, self.bond)
             neigh_pos   =   self.neigh_set + neigh_orig
         
             for rj in neigh_pos: 
                    
                 e       =   get_potential_ij(ri, rj, ni, nj, posits, i, params, \
                                              cutoff) 
         
                 e_KCm[k]       +=  e
示例#9
0
    def forces_on_posArr(self, split_beg, pos_arr,  af1, af2, af3, dnGreat, \
                             posits, layer_neighbors, \
                             chem_symbs, params, cutoff, natoms):
        
        
        nj          =   np.array([0., 0., 1.])    
        dnj         =   np.array([[0., 0., 0],
                                  [0., 0., 0],
                                  [0., 0., 0]])

        for l, ri in enumerate(pos_arr):
            i   =   l  + split_beg 
            if chem_symbs[i] == 'C': # SHREAR ADD
                
                ni_f        =   local_normal(i, posits, layer_neighbors, accept_noneighbor = self.no_edge_neighbor)
                dni_f       =   dnGreat[i]
                    
                ni          =   -1*ni_f
                dni         =   -dni_f
                

                neigh_orig  =   get_setOrig(ri, self.edge, self.bond)
                neigh_pos   =   self.neigh_set + neigh_orig
                
                
                
                for rj in neigh_pos: 
                    
                    # Force due to atom j on atom i
                    fij     =   get_forces_ij(ri, rj, ni, nj, dni, dnj, \
                                              posits, i, params, \
                                              cutoff, no_edge_neighbor = self.no_edge_neighbor) #, layer_neighbors = layer_neighbors)
            
                    
                    af1[i]  +=  fij[0]
                    af2[i]  +=  fij[1]
                    af3[i]  +=  fij[2]
示例#10
0
    def energy_on_posArr(self, k, split_len, pos_arr, e_KCm, \
                             posits, layer_neighbors,
                             chem_symbs, params, cutoff, natoms):

        nj = np.array([0., 0., 1.])

        for l, ri in enumerate(pos_arr):
            i = l + split_len
            if chem_symbs[i] == 'C':  # SHEAR ADD
                ni = local_normal(i,
                                  posits,
                                  layer_neighbors,
                                  accept_noneighbor=self.no_edge_neighbor)
                ni = -1 * ni

                neigh_orig = get_setOrig(ri, self.edge, self.bond)
                neigh_pos = self.neigh_set + neigh_orig

                for rj in neigh_pos:

                    e       =   get_potential_ij(ri, rj, ni, nj, posits, i, params, \
                                                 cutoff)

                    e_KCm[k] += e