コード例 #1
0
ファイル: point_charges.py プロジェクト: yihsuanliu/gpaw
    def get_value(self, position=None, spos_c=None):
        """The potential value (as seen by an electron)
        at a certain grid point.

        position [Angstrom]
        spos_c scaled position on the grid"""
        if position is None:
            vr = np.dot(spos_c, self.gd.h_cv * self.gd.N_c)
        else:
            vr = position / Bohr

        if debug:
            v = 0
            for pc in self:
                # use c function XXXXX
                d = np.sqrt(np.sum((vr - pc.position / Bohr)**2))
                v -= pc.charge / d
        else:
            if self.pc_nc is None or self.charge_n is None:
                n = len(self)
                pc_nc = np.empty((n, 3))
                charge_n = np.empty((n))
                for a, pc in enumerate(self):
                    pc_nc[a] = pc.position / Bohr
                    charge_n[a] = pc.charge
                self.pc_nc = pc_nc
                self.charge_n = charge_n

            v = _gpaw.pc_potential_value(vr, self.pc_nc, self.charge_n)
        return v
コード例 #2
0
    def get_value(self, position=None, spos_c=None):
        """The potential value (as seen by an electron)
        at a certain grid point.

        position [Angstrom]
        spos_c scaled position on the grid"""
        if position is None:
            vr = np.dot(spos_c, self.gd.h_cv * self.gd.N_c)
        else:
            vr = position / Bohr

        if debug:
            v = 0
            for pc in self:
                # use c function XXXXX
                d = np.sqrt(np.sum((vr - pc.position / Bohr) ** 2))
                v -= pc.charge / d
        else:
            if self.pc_nc is None or self.charge_n is None:
                n = len(self)
                pc_nc = np.empty((n, 3))
                charge_n = np.empty((n))
                for a, pc in enumerate(self):
                    pc_nc[a] = pc.position / Bohr
                    charge_n[a] = pc.charge
                self.pc_nc = pc_nc
                self.charge_n = charge_n

            v = _gpaw.pc_potential_value(vr, self.pc_nc, self.charge_n)
        return v
コード例 #3
0
    def get_value(self, positions=None, spos_c=None):
        """ The potential value as seen by an electron at a certain grid point.

            positions [Bohr] or
            spos_c : scaled position on the grid.

        """
        if position is None:
            vr = spos_c * self.gd.h_cv * self.gd.N_c
        else:
            vr = position

        if self.pc_nc is None or self.charge_n is None:
            n = len(self.atoms)
            pc_nc = np.empty((n,3))
            charge_n = np.empty((n))
            for a, pc in enumerate(self.atoms):
                pc_nc[a] = pc.positions / Bohr
                charge_n[a] = pc.charge

            self.pc_nc = pc_nc
            self.charge_n = charge_n
            

        if self.qmmm_pbc == 2 or self.qmmm_pbc is None:
            v = _gpaw.pc_potential_value(vr, self.pc_nc, self.charge_n)

        elif self.qmmm_pbc == 1:
            # When placing the potential on the grid the expansion is in
            # wolf.c. Here we translate the classical pcs around the 
            # origin (0,0,0).
            self.pc_nc, self.charge_n = self.get_expansions()
            v = _gpaw.wolf_potential_value(vr, self.pc_nc, self.charge_n)

       
        # Delete arrays (remade) 
        self.pc_nc, self.charge_n = None, None
        return v
コード例 #4
0
ファイル: mm_potentials.py プロジェクト: eojons/gpaw-scme
    def get_value(self, position=None, spos_c=None):
        """The potential value (as seen by an electron)
        at a certain grid point.

        position [Angstrom]
        spos_c scaled position on the grid"""
        if position is None:
            vr = spos_c * self.gd.h_cv * self.gd.N_c
        else:
            vr = position

        if self.pc_nc is None or self.charge_n is None:
            n = len(self.atoms)
            pc_nc = np.empty((n, 3))
            charge_n = np.empty((n))
            for a, pc in enumerate(self.atoms):
                pc_nc[a] = pc.position / Bohr 
                charge_n[a] = pc.charge
            self.pc_nc = pc_nc
            self.charge_n = charge_n

        v = _gpaw.pc_potential_value(vr, self.pc_nc, self.charge_n)
        return v