occ
Loading...
Searching...
No Matches
occ::dft Namespace Reference

functionality related to Kohn-Sham density functional theory More...

Namespaces

namespace  cosx
 
namespace  grid
 
namespace  impl
 
namespace  kernels
 

Classes

struct  AtomGrid
 Structure to hold atom-centered grid data. More...
 
class  DensityFunctional
 
class  DFT
 
struct  DFTMethod
 
struct  FuncComponent
 
class  HirshfeldPartition
 Class implementing Hirshfeld atomic charge analysis. More...
 
struct  MethodDefinition
 
class  MolecularGrid
 Class for molecular integration grids in DFT. More...
 
class  MolecularGridPoints
 Class for storing and managing molecular grid points. More...
 
class  NonLocalCorrelationFunctional
 
struct  PartitionMethod
 
struct  RadialGrid
 Structure to hold radial grid data. More...
 
struct  RangeSeparatedParameters
 

Typedefs

using PointChargeList = std::vector< occ::core::PointCharge >
 
using dfid = DensityFunctional::Identifier
 

Enumerations

enum class  PartitionFunction { Becke , StratmannScuseria }
 Enumeration of available partition functions for atomic weight calculation. More...
 
enum class  RadialGridMethod {
  LMG , TreutlerAlrichs , MuraKnowles , Becke ,
  GaussChebyshev , EulerMaclaurin
}
 Enumeration of available radial grid generation methods. More...
 

Functions

DFTMethod get_dft_method (const std::string &method_string)
 
DFTMethod create_dft_method_from_definition (const MethodDefinition &def, bool polarized=false)
 
ankerl::unordered_dense::map< std::string, MethodDefinitionload_method_definitions (const std::string &filename)
 
void export_method_definitions (const std::string &filename, const ankerl::unordered_dense::map< std::string, MethodDefinition > &definitions)
 
std::string dfid_to_string (DensityFunctional::Identifier id)
 
DensityFunctional::Identifier string_to_dfid (const std::string &name)
 
uint_fast16_t nearest_grid_level_at_or_above (uint_fast16_t n)
 Find the nearest Lebedev grid level at or above the requested number of points.
 
uint_fast16_t nearest_grid_level_below (uint_fast16_t n)
 Find the nearest Lebedev grid level below the requested number of points.
 
size_t angular_point_count (size_t level)
 Get the number of points in a Lebedev grid.
 
double get_atomic_radius (size_t atomic_number)
 Get the atomic radius for a given atomic number.
 
Vec becke_partition (const Vec &w)
 Apply the Becke partition function.
 
Vec stratmann_scuseria_partition (const Vec &w)
 Apply the Stratmann-Scuseria partition function.
 
Mat calculate_interatomic_distances (const Mat3N &positions)
 Calculate interatomic distances.
 
Mat calculate_atomic_grid_weights (PartitionMethod method, const Mat &grid_points, const Mat &atomic_positions, const Vec &radii, const Mat &interatomic_distances)
 Calculate Becke atomic weights for grid points.
 
IVec prune_nwchem_scheme (size_t nuclear_charge, size_t max_angular, size_t num_radial, const Vec &radii)
 Apply the NWChem pruning scheme to a radial grid.
 
IVec prune_numgrid_scheme (size_t atomic_number, size_t max_angular, size_t min_angular, const Vec &radii)
 Apply the NumGrid pruning scheme to a radial grid.
 
RadialGrid generate_becke_radial_grid (size_t num_points, double rm=1.0)
 Generate a Becke radial grid.
 
RadialGrid generate_mura_knowles_radial_grid (size_t num_points, size_t charge)
 Generate a Mura-Knowles radial grid.
 
RadialGrid generate_treutler_alrichs_radial_grid (size_t num_points)
 Generate a Treutler-Alrichs radial grid.
 
RadialGrid generate_gauss_chebyshev_radial_grid (size_t num_points)
 Generate a Gauss-Chebyshev radial grid.
 
RadialGrid generate_euler_maclaurin_radial_grid (size_t num_points, double alpha)
 Generate a Euler-Maclaurin radial grid.
 
RadialGrid generate_lmg_radial_grid (size_t atomic_number, double radial_precision, double alpha_max, int l_max, const occ::Vec &alpha_min)
 Generate a Lindh-Malmqvist-Gagliardi (LMG) radial grid.
 
double lmg_inner (const double max_error, const double alpha_inner)
 Helper function to calculate LMG inner radial boundary.
 
double lmg_outer (const double max_error, const double alpha_outer, const int l, const double guess)
 Helper function to calculate LMG outer radial boundary.
 
double lmg_h (const double max_error, const int l, const double guess)
 Helper function to calculate LMG grid spacing parameter.
 
AtomGrid generate_atom_grid (size_t atomic_number, const GridSettings &settings, RadialGridMethod method=RadialGridMethod::LMG, double alpha_max=0.0, int l_max=0, const Vec &alpha_min=Vec())
 Generate an atom-centered grid using the specified method.
 
Vec calculate_hirshfeld_charges (const occ::qm::AOBasis &basis, const occ::qm::MolecularOrbitals &mo, int charge=0)
 Calculate Hirshfeld charges for a molecule.
 
std::vector< occ::core::Multipole< 4 > > calculate_hirshfeld_multipoles (const occ::qm::AOBasis &basis, const occ::qm::MolecularOrbitals &mo, int max_multipole_order=4, int charge=0)
 Calculate Hirshfeld multipoles for a molecule.
 
template<occ::qm::SpinorbitalKind spinorbital_kind, int derivative_order>
void xc_potential_matrix (const DensityFunctional::Result &res, MatConstRef rho, const occ::gto::GTOValues &gto_vals, MatRef KK, double &energy)=delete
 
template<>
void xc_potential_matrix< Restricted, 0 > (const DensityFunctional::Result &res, MatConstRef rho, const occ::gto::GTOValues &gto_vals, MatRef KK, double &energy)
 
template<>
void xc_potential_matrix< Restricted, 1 > (const DensityFunctional::Result &res, MatConstRef rho, const occ::gto::GTOValues &gto_vals, MatRef KK, double &energy)
 
template<>
void xc_potential_matrix< Restricted, 2 > (const DensityFunctional::Result &res, MatConstRef rho, const occ::gto::GTOValues &gto_vals, MatRef KK, double &energy)
 
template<>
void xc_potential_matrix< Unrestricted, 0 > (const DensityFunctional::Result &res, MatConstRef rho, const occ::gto::GTOValues &gto_vals, MatRef KK, double &energy)
 
template<>
void xc_potential_matrix< Unrestricted, 1 > (const DensityFunctional::Result &res, MatConstRef rho, const occ::gto::GTOValues &gto_vals, MatRef KK, double &energy)
 
template<>
void xc_potential_matrix< Unrestricted, 2 > (const DensityFunctional::Result &res, MatConstRef rho, const occ::gto::GTOValues &gto_vals, MatRef KK, double &energy)
 

Variables

const std::array< uint_fast16_t, 33 > lebedev_grid_levels
 Array of available Lebedev grid levels.
 

Detailed Description

functionality related to Kohn-Sham density functional theory

part of the occ::qm, occ:gto, occ:io module

Typedef Documentation

◆ dfid

◆ PointChargeList

using occ::dft::PointChargeList = typedef std::vector<occ::core::PointCharge>

Enumeration Type Documentation

◆ PartitionFunction

enum class occ::dft::PartitionFunction
strong

Enumeration of available partition functions for atomic weight calculation.

Enumerator
Becke 

Becke's original partition function.

StratmannScuseria 

Stratmann-Scuseria partition function.

◆ RadialGridMethod

enum class occ::dft::RadialGridMethod
strong

Enumeration of available radial grid generation methods.

Enumerator
LMG 

Lindh-Malmqvist-Gagliardi method.

TreutlerAlrichs 

Treutler-Alrichs method.

MuraKnowles 

Mura-Knowles method.

Becke 

Becke's transformation method.

GaussChebyshev 

Gauss-Chebyshev method.

EulerMaclaurin 

Gauss-Chebyshev method.

Function Documentation

◆ angular_point_count()

size_t occ::dft::angular_point_count ( size_t  level)

Get the number of points in a Lebedev grid.

Parameters
levelThe Lebedev grid level
Returns
size_t The number of points in the grid

◆ becke_partition()

Vec occ::dft::becke_partition ( const Vec &  w)

Apply the Becke partition function.

Parameters
wInput values to partition
Returns
Vec Partitioned values

◆ calculate_atomic_grid_weights()

Mat occ::dft::calculate_atomic_grid_weights ( PartitionMethod  method,
const Mat grid_points,
const Mat atomic_positions,
const Vec &  radii,
const Mat interatomic_distances 
)

Calculate Becke atomic weights for grid points.

Parameters
grid_pointsGrid points (3 x N)
atomic_positionsAtomic positions (3 x M)
radiiatomic radii (M)
interatomic_distancesMatrix of interatomic distances (M x M)
Returns
Mat Matrix of weights (N x M)

◆ calculate_hirshfeld_charges()

Vec occ::dft::calculate_hirshfeld_charges ( const occ::qm::AOBasis basis,
const occ::qm::MolecularOrbitals mo,
int  charge = 0 
)

Calculate Hirshfeld charges for a molecule.

Convenience function to compute Hirshfeld charges in a single call.

Parameters
basisBasis set for the molecule
moMolecular orbitals containing the density matrix
chargeTotal molecular charge
Returns
Vec Vector of Hirshfeld charges for each atom

◆ calculate_hirshfeld_multipoles()

std::vector< occ::core::Multipole< 4 > > occ::dft::calculate_hirshfeld_multipoles ( const occ::qm::AOBasis basis,
const occ::qm::MolecularOrbitals mo,
int  max_multipole_order = 4,
int  charge = 0 
)

Calculate Hirshfeld multipoles for a molecule.

Convenience function to compute Hirshfeld multipoles in a single call.

Parameters
basisBasis set for the molecule
moMolecular orbitals containing the density matrix
max_multipole_orderMaximum order of multipoles to compute (0-4)
chargeTotal molecular charge
Returns
std::vector<occ::core::Multipole<4>> Vector of Hirshfeld multipoles for each atom

◆ calculate_interatomic_distances()

Mat occ::dft::calculate_interatomic_distances ( const Mat3N &  positions)

Calculate interatomic distances.

Parameters
positionsAtomic positions (3 x N)
Returns
Mat Matrix of interatomic distances

◆ create_dft_method_from_definition()

DFTMethod occ::dft::create_dft_method_from_definition ( const MethodDefinition def,
bool  polarized = false 
)

◆ dfid_to_string()

std::string occ::dft::dfid_to_string ( DensityFunctional::Identifier  id)

◆ export_method_definitions()

void occ::dft::export_method_definitions ( const std::string &  filename,
const ankerl::unordered_dense::map< std::string, MethodDefinition > &  definitions 
)

◆ generate_atom_grid()

AtomGrid occ::dft::generate_atom_grid ( size_t  atomic_number,
const GridSettings settings,
RadialGridMethod  method = RadialGridMethod::LMG,
double  alpha_max = 0.0,
int  l_max = 0,
const Vec &  alpha_min = Vec() 
)

Generate an atom-centered grid using the specified method.

Parameters
atomic_numberAtomic number of the center atom
settingsGrid generation settings
methodThe radial grid method to use
alpha_maxMaximum exponent from basis set (optional)
l_maxMaximum angular momentum from basis set (optional)
alpha_minMinimum exponents for each angular momentum (optional)
Returns
AtomGrid The generated atom-centered grid

◆ generate_becke_radial_grid()

RadialGrid occ::dft::generate_becke_radial_grid ( size_t  num_points,
double  rm = 1.0 
)

Generate a Becke radial grid.

Reference: A. D. Becke, J. Chem. Phys. 88, 2547 (1988)

Parameters
num_pointsNumber of radial points
rmScaling parameter
Returns
RadialGrid The generated radial grid

◆ generate_euler_maclaurin_radial_grid()

RadialGrid occ::dft::generate_euler_maclaurin_radial_grid ( size_t  num_points,
double  alpha 
)

Generate a Euler-Maclaurin radial grid.

Parameters
num_pointsNumber of radial points
alpha
Returns
RadialGrid The generated radial grid

◆ generate_gauss_chebyshev_radial_grid()

RadialGrid occ::dft::generate_gauss_chebyshev_radial_grid ( size_t  num_points)

Generate a Gauss-Chebyshev radial grid.

Parameters
num_pointsNumber of radial points
Returns
RadialGrid The generated radial grid

◆ generate_lmg_radial_grid()

RadialGrid occ::dft::generate_lmg_radial_grid ( size_t  atomic_number,
double  radial_precision,
double  alpha_max,
int  l_max,
const occ::Vec alpha_min 
)

Generate a Lindh-Malmqvist-Gagliardi (LMG) radial grid.

Reference: T. Helgaker, P. Jørgensen, J. Olsen, "Molecular Electronic Structure Theory", John Wiley & Sons, 2000

Parameters
atomic_numberAtomic number
radial_precisionPrecision parameter for the radial grid
alpha_maxMaximum exponent
l_maxMaximum angular momentum
alpha_minMinimum exponents for each angular momentum
Returns
RadialGrid The generated radial grid

◆ generate_mura_knowles_radial_grid()

RadialGrid occ::dft::generate_mura_knowles_radial_grid ( size_t  num_points,
size_t  charge 
)

Generate a Mura-Knowles radial grid.

Reference: M. E. Mura and P. J. Knowles, J. Chem. Phys. 104, 9848 (1996)

Parameters
num_pointsNumber of radial points
chargeAtomic number
Returns
RadialGrid The generated radial grid

◆ generate_treutler_alrichs_radial_grid()

RadialGrid occ::dft::generate_treutler_alrichs_radial_grid ( size_t  num_points)

Generate a Treutler-Alrichs radial grid.

Reference: O. Treutler and R. Ahlrichs, J. Chem. Phys. 102, 346 (1995)

Parameters
num_pointsNumber of radial points
Returns
RadialGrid The generated radial grid

◆ get_atomic_radius()

double occ::dft::get_atomic_radius ( size_t  atomic_number)

Get the atomic radius for a given atomic number.

Parameters
atomic_numberThe atomic number
Returns
double The atomic radius in Bohr

◆ get_dft_method()

DFTMethod occ::dft::get_dft_method ( const std::string &  method_string)

◆ lmg_h()

double occ::dft::lmg_h ( const double  max_error,
const int  l,
const double  guess 
)

Helper function to calculate LMG grid spacing parameter.

Parameters
max_errorMaximum error parameter
lAngular momentum
guessInitial guess for the spacing
Returns
double Grid spacing parameter

◆ lmg_inner()

double occ::dft::lmg_inner ( const double  max_error,
const double  alpha_inner 
)

Helper function to calculate LMG inner radial boundary.

Parameters
max_errorMaximum error parameter
alpha_innerInner alpha parameter
Returns
double Inner radial boundary

◆ lmg_outer()

double occ::dft::lmg_outer ( const double  max_error,
const double  alpha_outer,
const int  l,
const double  guess 
)

Helper function to calculate LMG outer radial boundary.

Parameters
max_errorMaximum error parameter
alpha_outerOuter alpha parameter
lAngular momentum
guessInitial guess for the boundary
Returns
double Outer radial boundary

◆ load_method_definitions()

ankerl::unordered_dense::map< std::string, MethodDefinition > occ::dft::load_method_definitions ( const std::string &  filename)

◆ nearest_grid_level_at_or_above()

uint_fast16_t occ::dft::nearest_grid_level_at_or_above ( uint_fast16_t  n)

Find the nearest Lebedev grid level at or above the requested number of points.

Parameters
nRequested number of angular points
Returns
uint_fast16_t The actual number of angular points in the Lebedev grid

◆ nearest_grid_level_below()

uint_fast16_t occ::dft::nearest_grid_level_below ( uint_fast16_t  n)

Find the nearest Lebedev grid level below the requested number of points.

Parameters
nRequested number of angular points
Returns
uint_fast16_t The actual number of angular points in the Lebedev grid

◆ prune_numgrid_scheme()

IVec occ::dft::prune_numgrid_scheme ( size_t  atomic_number,
size_t  max_angular,
size_t  min_angular,
const Vec &  radii 
)

Apply the NumGrid pruning scheme to a radial grid.

Parameters
atomic_numberAtomic number
max_angularMaximum number of angular points
min_angularMinimum number of angular points
radiiRadial grid points
Returns
IVec Number of angular points for each radial point

◆ prune_nwchem_scheme()

IVec occ::dft::prune_nwchem_scheme ( size_t  nuclear_charge,
size_t  max_angular,
size_t  num_radial,
const Vec &  radii 
)

Apply the NWChem pruning scheme to a radial grid.

Parameters
nuclear_chargeAtomic number
max_angularMaximum number of angular points
num_radialNumber of radial points
radiiRadial grid points
Returns
IVec Number of angular points for each radial point

◆ stratmann_scuseria_partition()

Vec occ::dft::stratmann_scuseria_partition ( const Vec &  w)

Apply the Stratmann-Scuseria partition function.

Parameters
wInput values to partition
Returns
Vec Partitioned values

◆ string_to_dfid()

DensityFunctional::Identifier occ::dft::string_to_dfid ( const std::string &  name)

◆ xc_potential_matrix()

template<occ::qm::SpinorbitalKind spinorbital_kind, int derivative_order>
void occ::dft::xc_potential_matrix ( const DensityFunctional::Result res,
MatConstRef  rho,
const occ::gto::GTOValues gto_vals,
MatRef  KK,
double &  energy 
)
delete

◆ xc_potential_matrix< Restricted, 0 >()

template<>
void occ::dft::xc_potential_matrix< Restricted, 0 > ( const DensityFunctional::Result res,
MatConstRef  rho,
const occ::gto::GTOValues gto_vals,
MatRef  KK,
double &  energy 
)

◆ xc_potential_matrix< Restricted, 1 >()

template<>
void occ::dft::xc_potential_matrix< Restricted, 1 > ( const DensityFunctional::Result res,
MatConstRef  rho,
const occ::gto::GTOValues gto_vals,
MatRef  KK,
double &  energy 
)

◆ xc_potential_matrix< Restricted, 2 >()

template<>
void occ::dft::xc_potential_matrix< Restricted, 2 > ( const DensityFunctional::Result res,
MatConstRef  rho,
const occ::gto::GTOValues gto_vals,
MatRef  KK,
double &  energy 
)

◆ xc_potential_matrix< Unrestricted, 0 >()

template<>
void occ::dft::xc_potential_matrix< Unrestricted, 0 > ( const DensityFunctional::Result res,
MatConstRef  rho,
const occ::gto::GTOValues gto_vals,
MatRef  KK,
double &  energy 
)

◆ xc_potential_matrix< Unrestricted, 1 >()

template<>
void occ::dft::xc_potential_matrix< Unrestricted, 1 > ( const DensityFunctional::Result res,
MatConstRef  rho,
const occ::gto::GTOValues gto_vals,
MatRef  KK,
double &  energy 
)

◆ xc_potential_matrix< Unrestricted, 2 >()

template<>
void occ::dft::xc_potential_matrix< Unrestricted, 2 > ( const DensityFunctional::Result res,
MatConstRef  rho,
const occ::gto::GTOValues gto_vals,
MatRef  KK,
double &  energy 
)

Variable Documentation

◆ lebedev_grid_levels

const std::array<uint_fast16_t, 33> occ::dft::lebedev_grid_levels
extern

Array of available Lebedev grid levels.

Each element in the array represents a valid number of Lebedev grid points.