Coverage for gpaw/ae.py: 97%

60 statements  

« prev     ^ index     » next       coverage.py v7.7.1, created at 2025-07-08 00:17 +0000

1"""Bare Coulomb potential for hydrogen.""" 

2 

3import numpy as np 

4from scipy.special import erf 

5 

6from gpaw.basis_data import Basis 

7from gpaw.setup import BaseSetup 

8from gpaw.spline import Spline 

9 

10 

11class HydrogenAllElectronSetup(BaseSetup): 

12 

13 def __init__(self, alpha1=10.0, alpha2=300.0): 

14 self.alpha1 = alpha1 

15 self.alpha2 = alpha2 

16 

17 self.natoms = 0 

18 self.E = 0.0 

19 self.Z = 1 

20 self.Nc = 0 

21 self.Nv = 1 

22 self.nao = None 

23 self.pt_j = [] 

24 self.ni = 0 

25 self.l_j = [0] 

26 self.l_orb_J = [0] 

27 self.n_j = [1] 

28 self.tauct = self.nct = Spline.from_data(0, 0.5, [0.0, 0.0, 0.0]) 

29 self.Nct = 0.0 

30 self.N0_p = np.zeros(0) 

31 rc = 2.0 

32 r_g = np.linspace(0, rc, 100) 

33 r2_g = r_g**2 

34 self.ghat_l = [Spline.from_data(0, rc, 4 * alpha1**1.5 / np.pi**0.5 * 

35 np.exp(-alpha1 * r2_g))] 

36 v_g = erf(alpha1**0.5 * r_g) - erf(alpha2**0.5 * r_g) 

37 v_g[1:] *= (4 * np.pi)**0.5 / r_g[1:] 

38 v_g[0] = 4 * (alpha1**0.5 - alpha2**0.5) 

39 self.vbar = Spline.from_data(0, rc, v_g) 

40 self.Delta_pL = np.zeros((0, 1)) 

41 self.Delta_iiL = np.zeros((0, 0, 1)) 

42 self.Delta0 = -1 / (4 * np.pi)**0.5 

43 self.lmax = 0 

44 self.K_p = self.M_p = self.MB_p = self.X_p = np.zeros(0) 

45 self.M_pp = np.zeros((0, 0)) 

46 self.Kc = 0.0 

47 self.MB = 0.0 

48 self.M = -(alpha1 / 2 / np.pi)**0.5 

49 self.xc_correction = None 

50 self.dO_ii = np.zeros((0, 0)) 

51 self.type = 'all-electron' 

52 self.fingerprint = None 

53 self.symbol = 'H' 

54 self.ExxC = 0.0 

55 

56 def get_default_nbands(self): 

57 return 1 

58 

59 def build(self, basis): 

60 if basis is None: 

61 basis = Basis.find('H', 'sz(dzp)') 

62 elif isinstance(basis, str): 

63 basis = Basis.find('H', basis) 

64 

65 self.basis = basis 

66 self.basis_functions_J = self.basis.tosplines() 

67 self.pseudo_partial_waves_j = None # XXX 

68 

69 self.f_j = [1.0] 

70 self.nao = self.basis.nao 

71 

72 def print_info(self, text): 

73 text('Hydrogen all-electron potential')