Miscellaneous objects and functions
- classgpaw.lfc.LocalizedFunctionsCollection(gd, spline_aj, kd=None, cut=False, dtype=<class 'float'>, integral=None, forces=None, xp=<module 'numpy' from '/home/docs/checkouts/readthedocs.org/user_builds/gpaw/envs/latest/lib/python3.12/site-packages/numpy/__init__.py'>, gpu_add_and_integrate=True)[source]
Utilizes that localized functions can be stored on a spherical subset of the uniform grid, as opposed to LocalizedFunctionsCollection which is just a wrapper around the old localized_functions which use rectangular grids.
- add(a_xG, c_axi=1.0, q=-1)[source]
Add localized functions to extended arrays.
-- a a a (G) += > c Phi (G) x -- xi i a,i
- add_derivative(a, v, a_xG, c_axi=1.0, q=-1)[source]
Add derivative of localized functions on atom to extended arrays.
Parameters:
- a: int
Atomic index of the derivative
- v: int
Cartesian coordinate of the derivative (0, 1 or 2)
This function adds the following sum to the extended arrays:
-- a a a (G) += > c dPhi (G) x -- xi iv i
where:
a d a dPhi (G) = -- Phi (g) iv dv i
is the derivative of the Phi^a and v is either x, y, or z.
- derivative(a_xG, c_axiv, q=-1)[source]
Calculate x-, y-, and z-derivatives of localized function integrals.
/ a* c_axiv = | dG a (G) dPhi (G) / x iv
where:
a d a dPhi (G) = -- Phi (g) iv dv i
and v is either x, y, or z, and R^a_v is the center of Phi^a.
Notice that d Phi^a_i / dR^a_v == - d Phi^a_i / d v.
- integrate(a_xG, c_axi, q=-1, add_to=False)[source]
Calculate integrals of arrays times localized functions.
/ a* c_axi = | dG a (G) Phi (G) / x i
- classgpaw.lfc.BasisFunctions(gd, spline_aj, kd=None, cut=False, dtype=<class 'float'>, integral=None, forces=None, xp=<module 'numpy' from '/home/docs/checkouts/readthedocs.org/user_builds/gpaw/envs/latest/lib/python3.12/site-packages/numpy/__init__.py'>, gpu_add_and_integrate=True)[source]
- add_to_density(nt_sG, f_asi)[source]
Add linear combination of squared localized functions to density.
\[\tilde{n}_{s} (r) += \sum^{}_{a,i} f^{a}_{si} [Φ^{a}_{i}(r)]^{2}\]
- calculate_force_contribution(vt_G, rhoT_MM, q)[source]
Calculate derivatives of potential matrix elements.
/ * _ | Phi (r) ~c | mu ~ _ _ _ DV += | -------- v(r) Phi (r) dr mu nu | dr nu / c
Results are added to DVt_vMM.
- calculate_potential_matrices(vt_G)[source]
Calculate lower part of potential matrix.
/ ~ | * _ ~ _ _ _ V = | Phi (r) v(r) Phi (r) dr for mu >= nu mu nu | mu nu /
Overwrites the elements of the target matrix Vt_MM.
- calculate_potential_matrix(vt_G, Vt_MM, q)[source]
Calculate lower part of potential matrix.
/ ~ | * _ ~ _ _ _ V = | Phi (r) v(r) Phi (r) dr for mu >= nu mu nu | mu nu /
Overwrites the elements of the target matrix Vt_MM.
- calculate_potential_matrix_derivative(vt_G, DVt_vMM, q)[source]
Calculate derivatives of potential matrix elements.
/ * _ | Phi (r) ~c | mu ~ _ _ _ DV += | -------- v(r) Phi (r) dr mu nu | dr nu / c
Results are added to DVt_vMM.
- construct_density(rho_MM, nt_G, q)[source]
Calculate electron density from density matrix.
- rho_MM: ndarray
Density matrix.
- nt_G: ndarray
Pseudo electron density.
~ -- * n(r) += > Phi (r) rho Phi (r) -- M1 M1M2 M2 M1,M2
- integrate2(a_xG, c_xM, q=-1)[source]
Calculate integrals of arrays times localized functions.
/ * c_xM += <Phi | a > = | dG Phi (G) a (G) M x / M x
- classgpaw.spline.Spline(spline)[source]
Spline object
- classmethodfrom_data(l, rmax, f_g)[source]
The integer l gives the angular momentum quantum number and the list contains the spline values from r=0 to r=rcut.
The array f_g gives the radial part of the function on the grid. The radial function is multiplied by a real solid spherical harmonics (r^l * Y_lm).
- classgpaw.poisson.FDPoissonSolver(nn=3, relax='J', eps=2e-10, maxiter=1000, remove_moment=None, use_charge_center=False, metallic_electrodes=False, use_charged_periodic_corrections=False, **kwargs)[source]
- classgpaw.xc.functional.XCFunctional(name, type)[source]
-
- calculate(gd, n_sg, v_sg=None, e_g=None)[source]
Calculate energy and potential.
- gd: GridDescriptor
Descriptor for 3-d grid.
- n_sg: rank-4 ndarray
Spin densities.
- v_sg: rank-4 ndarray
Array for potential. The XC potential is added to the values already there.
- e_g: rank-3 ndarray
Energy density. Values must be written directly, not added.
The total XC energy is returned.
- todict()[source]
Get dictionary representation of XC functional.
This representation works for libxc kernels; other classes should likely override this function and should probably not rely on this implementation.
- tostring()[source]
Get string representation of XC functional.
This will give the name for libxc functionals but other data for hybrids.
- xp=<module 'numpy' from '/home/docs/checkouts/readthedocs.org/user_builds/gpaw/envs/latest/lib/python3.12/site-packages/numpy/__init__.py'>
- classgpaw.old.grid_descriptor.GridDescriptor(N_c, cell_cv=[1, 1, 1], pbc_c=True, comm=None, parsize_c=None, allow_empty_domains=False)[source]
Descriptor-class for uniform 3D grid
A
GridDescriptorobject holds information on how functions, such as wave functions and electron densities, are discreticed in a certain domain in space. The main information here is how many grid points are used in each direction of the unit cell.There are methods for tasks such as allocating arrays, performing symmetry operations and integrating functions over space. All methods work correctly also when the domain is parallelized via domain decomposition.
This is how a 2x2x2 3D array is laid out in memory:
3-----7 |\ |\ | \ | \ | 1-----5 z 2--|--6 | y | \ | \ | \ | \| \| \| 0-----4 +-----x
Example
>>> a = np.zeros((2, 2, 2)) >>> a.ravel()[:] = range(8) >>> a array([[[0., 1.], [2., 3.]], [[4., 5.], [6., 7.]]])
Construct grid-descriptor object.
parameters:
- N_c: 3 ints
Number of grid points along axes.
- cell_cv: 3 float’s or 3x3 floats
Unit cell.
- pbc_c: one or three bools
Periodic boundary conditions flag(s).
- comm: MPI-communicator
Communicator for domain-decomposition.
- parsize_c: tuple of 3 ints, a single int or None
Number of domains.
- allow_empty_domains: bool
Allow parallelization that would generate empty domains.
Note that if pbc_c[c] is False, then the actual number of gridpoints along axis c is one less than N_c[c].
Attributes:
dvVolume per grid point.
h_cvArray of the grid spacing along the three axes.
N_cArray of the number of grid points along the three axes.
n_cNumber of grid points on this CPU.
beg_cBeginning of grid-point indices (inclusive).
end_cEnd of grid-point indices (exclusive).
commMPI-communicator for domain decomposition.
The length unit is Bohr.
- bytecount(dtype=<class 'float'>)[source]
Get the number of bytes used by a grid of specified dtype.
- calculate_dipole_moment(rho_g, center=False, origin_c=None)[source]
Calculate dipole moment of density.
- coarsen()[source]
Return coarsened \(GridDescriptor\) object.
Reurned descriptor has 2x2x2 fewer grid points.
- collect(a_xg, out=None, broadcast=False)[source]
Collect distributed array to master-CPU or all CPU’s.
- coords(c, pad=True)[source]
Return coordinates along one of the three axes.
Useful for plotting:
importmatplotlib.pyplotasplt plt.plot(gd.coords(0), data[:, 0, 0]) plt.show()
- dipole_moment(rho_R, center_v=None)[source]
Calculate dipole moment of density.
Integration region will be centered on center_v. Default center is center of unit cell.
- distribute(B_xg, out=None)[source]
Distribute full array B_xg to subdomains, result in b_xg.
B_xg is not used by the slaves (i.e. it should be None on all slaves) b_xg must be allocated on all nodes and will be overwritten.
- empty(n=(), dtype=<class 'float'>, global_array=False, pad=False, xp=<module 'numpy' from '/home/docs/checkouts/readthedocs.org/user_builds/gpaw/envs/latest/lib/python3.12/site-packages/numpy/__init__.py'>)[source]
Return new uninitialized 3D array for this domain.
The type can be set with the
dtypekeyword (default:float). Extra dimensions can be added withn=dim. A global array spanning all domains can be allocated withglobal_array=True.
- get_grid_point_coordinates(dtype=<class 'float'>, global_array=False)[source]
Construct cartesian coordinates of grid points in the domain.
- get_grid_point_distance_vectors(r_v, mic=True, dtype=<class 'float'>)[source]
Return distances to a given vector in the domain.
mic: if true adopts the mininimum image convention procedure by W. Smith in ‘The Minimum image convention in Non-Cubic MD cells’ March 29, 1989
- get_nearest_grid_point(spos_c, force_to_this_domain=False)[source]
Return index of nearest grid point.
The nearest grid point can be on a different CPU than the one the nucleus belongs to (i.e. return can be negative, or larger than gd.end_c), in which case something clever should be done. The point can be forced to the grid descriptors domain to be consistent with self.get_rank_from_position(spos_c).
- integrate(a_xg, b_yg=None, global_integral=True, hermitian=False)[source]
Integrate function(s) over domain.
- a_xg: ndarray
Function(s) to be integrated.
- b_yg: ndarray
If present, integrate a_xg.conj() * b_yg.
- global_integral: bool
If the array(s) are distributed over several domains, then the total sum will be returned. To get the local contribution only, use global_integral=False.
- hermitian: bool
Result is hermitian.
- interpolate_grid_points(spos_nc, vt_g)[source]
Return interpolated values.
Calculate interpolated values from array vt_g based on the scaled coordinates on spos_c.
This doesn’t work in parallel, since it would require communication between neighbouring grids.
- new_descriptor(N_c=None, cell_cv=None, pbc_c=None, comm=None, parsize_c=None, allow_empty_domains=False)[source]
Create new descriptor based on this one.
The new descriptor will use the same class (possibly a subclass) and all arguments will be equal to those of this descriptor unless new arguments are provided.
- plane_wave(k_c)[source]
Evaluate plane wave on grid.
Returns:
_ _ ik.r e ,
where the wave vector is given by k_c (in units of reciprocal lattice vectors).
- refine()[source]
Return refined \(GridDescriptor\) object.
Returned descriptor has 2x2x2 more grid points.
- wannier_matrix(psit_nG, psit_nG1, G_c, nbands=None)[source]
Wannier localization integrals
The soft part of Z is given by (Eq. 27 ref1):
~ ~ -i G.r ~ Z = <psi | e |psi > nm n m
psit_nG and psit_nG1 are the set of wave functions for the two different spin/kpoints in question.
ref1: Thygesen et al, Phys. Rev. B 72, 125119 (2005)
- zero_pad(a_xg, global_array=True)[source]
Pad array with zeros as first element along non-periodic directions.
Array may either be local or in standard decomposition.
- zeros(n=(), dtype=<class 'float'>, global_array=False, pad=False, xp=<module 'numpy' from '/home/docs/checkouts/readthedocs.org/user_builds/gpaw/envs/latest/lib/python3.12/site-packages/numpy/__init__.py'>)[source]
Return new zeroed 3D array for this domain.
The type can be set with the
dtypekeyword (default:float). Extra dimensions can be added withn=dim. A global array spanning all domains can be allocated withglobal_array=True.
- classgpaw.scf.SCFLoop(criteria, maxiter=100, niter_fixdensity=None)[source]
Self-consistent field loop.
- classgpaw.old.band_descriptor.BandDescriptor(nbands, comm=None, strided=False)[source]
Descriptor-class for ordered lists of bands
A
BandDescriptorobject holds information on how functions, such as wave functions and corresponding occupation numbers, are divided into groups according to band indices. The main information here is how many bands are stored on each processor and who gets what.This is how a 12 band array is laid out in memory on 3 cpu’s:
a) Blocked groups b) Strided groups 3 7 11 9 10 11 myn 2 \ 6 \ 10 myn 6 7 8 | 1 \ 5 \ 9 | 3 4 5 | 0 4 8 | 0 1 2 | | +----- band_rank +----- band_rank
Example
>>> a = np.zeros((3, 4)) >>> a.ravel()[:] = range(12) >>> a array([[ 0., 1., 2., 3.], [ 4., 5., 6., 7.], [ 8., 9., 10., 11.]]) >>> b = np.zeros((4, 3)) >>> b.ravel()[:] = range(12) >>> b.T array([[ 0., 3., 6., 9.], [ 1., 4., 7., 10.], [ 2., 5., 8., 11.]])
Construct band-descriptor object.
Parameters:
- nbands: int
Global number of bands.
- comm: MPI-communicator
Communicator for band-groups.
- strided: bool
Enable strided band distribution for better load balancing with many unoccupied bands.
Note that if comm.size is 1, then all bands are contained on a single CPU and blocked/strided grouping loses its meaning.
Attributes:
nbandsNumber of bands in total.
mynbandsNumber of bands on this CPU.
begBeginning of band indices in group (inclusive).
endEnd of band indices in group (exclusive).
stepStride for band indices between
begandend.commMPI-communicator for band distribution.
- distribute(B_nx, b_nx)[source]
distribute full array B_nx to band groups, result in b_nx. b_nx must be allocated.
- empty(n=(), dtype=<class 'float'>, global_array=False)[source]
Return new uninitialized 3D array for this domain.
The type can be set with the
dtypekeyword (default:float). Extra dimensions can be added withn=dim. A global array spanning all domains can be allocated withglobal_array=True.
- get_band_indices(band_rank=None)[source]
Return the global band indices which belong to a given rank.
- classgpaw.spinorbit.BZWaveFunctions(kd, wfs, occ, nelectrons, n_aj, l_aj)[source]
Container for eigenvalues and PAW projections (all of BZ).
- get_orbital_magnetic_moments()[source]
Returns the orbital magnetic moment vector for each atom a.
- classgpaw.old.kpt_descriptor.KPointDescriptor(kpts, nspins=1)[source]
Descriptor-class for k-points.
Construct descriptor object for kpoint/spin combinations (ks-pair).
Parameters:
- kpts: None, sequence of 3 ints, or (n,3)-shaped array
Specification of the k-point grid. None=Gamma, list of ints=Monkhorst-Pack, ndarray=user specified.
- nspins: int
Number of spins.
Attributes =================== =================================================
N_cNumber of k-points in the different directions.nspinsNumber of spins in total.mynspinsNumber of spins on this CPU.nibzkptsNumber of irreducible kpoints in 1st BZ.mynksNumber of k-point/spin combinations on this CPU.gammaBoolean indicator for gamma point calculation.commMPI-communicator for kpoint distribution.weight_kWeights of each k-pointibzk_kcUnknownibzk_qcUnknownsym_kUnknowntime_reversal_kUnknownbz2ibz_kUnknownibz2bz_kUnknownbz2bz_ksUnknownsymmetryObject representing symmetries =================== =================================================- find_k_plus_q(q_c, kpts_k=None)[source]
Find the indices of k+q for all kpoints in the Brillouin zone.
In case that k+q is outside the BZ, the k-point inside the BZ corresponding to k+q is given.
- get_ibz_q_points(bzq_qc, op_scc)[source]
Return ibz q points and the corresponding symmetry operations that work for k-mesh as well.
- get_transform_wavefunction_index(nG, k)[source]
Get the "wavefunction transform index".
This is a permutation of the numbers 1, 2, .. N which associates k + q to some k, and where N is the total number of grid points as specified by nG which is a 3D tuple.
Returns index_G and phase_G which are one-dimensional arrays on the grid.
- set_symmetry(atoms, symmetry, comm=None)[source]
Create symmetry object and construct irreducible Brillouin zone.
- atoms: Atoms object
Defines atom positions and types and also unit cell and boundary conditions.
- symmetry: Symmetry object
Symmetry object.