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
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
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
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