ERKALE
ERKALE - DFT from Hel
 All Classes Functions Variables Friends Pages
hirshfeld.h
1 /*
2  * This source code is part of
3  *
4  * E R K A L E
5  * -
6  * HF/DFT from Hel
7  *
8  * Written by Susi Lehtola, 2010-2013
9  * Copyright (c) 2010-2013, Susi Lehtola
10  *
11  * This program is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU General Public License
13  * as published by the Free Software Foundation; either version 2
14  * of the License, or (at your option) any later version.
15  */
16 
17 #ifndef ERKALE_HIRSHFELD
18 #define ERKALE_HIRSHFELD
19 
20 #include "basis.h"
21 
22 extern "C" {
23  // For spline interpolation
24 #include <gsl/gsl_spline.h>
25 }
26 
30  double dr;
32  std::vector<double> rho;
33 
34  public:
36  HirshfeldAtom();
38  HirshfeldAtom(const BasisSet & basis, const arma::mat & P, double dr=0.001);
40  HirshfeldAtom(double dr, const std::vector<double> & rho);
43 
45  double get(double r) const;
46 
48  double get_spacing() const;
50  std::vector<double> get_rho() const;
51 
53  double get_range() const;
55  double compute_moment(int n) const;
56 };
57 
59 class Hirshfeld {
60  protected:
62  std::vector<HirshfeldAtom> atoms;
64  std::vector<coords_t> cen;
65 
66  public:
68  Hirshfeld();
70  ~Hirshfeld();
71 
73  void set(const std::vector<coords_t> & cen, double dr, const std::vector< std::vector<double> > & rho);
75  std::vector< std::vector<double> > get_rho() const;
76 
78  void compute(const BasisSet & basis, std::string method);
80  void load(const BasisSet & basis);
81 
83  double get_density(size_t inuc, const coords_t & r) const;
85  double get_weight(size_t inuc, const coords_t & r) const;
87  double get_range(size_t inuc) const;
89  double compute_moment(size_t inuc, int n) const;
90 
92  void print_densities() const;
93 };
94 
95 #endif
double get_range(size_t inuc) const
Get range of atom.
Definition: hirshfeld.cpp:242
std::vector< HirshfeldAtom > atoms
List of atoms.
Definition: hirshfeld.h:62
std::vector< coords_t > cen
Centers.
Definition: hirshfeld.h:64
std::vector< double > get_rho() const
Get densities.
Definition: hirshfeld.cpp:103
double dr
Grid spacing.
Definition: hirshfeld.h:30
Hirshfeld()
Dummy constructor.
Definition: hirshfeld.cpp:122
~HirshfeldAtom()
Destructor.
Definition: hirshfeld.cpp:79
double compute_moment(size_t inuc, int n) const
Calculate expectation values of radius (already includes r^2 factor)
Definition: hirshfeld.cpp:246
~Hirshfeld()
Destructor.
Definition: hirshfeld.cpp:205
double compute_moment(int n) const
Calculate expectation values of radius (already includes r^2 factor)
Definition: hirshfeld.cpp:114
void load(const BasisSet &basis)
Load from checkpoints.
Definition: hirshfeld.cpp:155
double get_density(size_t inuc, const coords_t &r) const
Evaluate density at r.
Definition: hirshfeld.cpp:208
HirshfeldAtom()
Dummy constructor.
Definition: hirshfeld.cpp:24
void print_densities() const
Print densities.
Definition: hirshfeld.cpp:250
void set(const std::vector< coords_t > &cen, double dr, const std::vector< std::vector< double > > &rho)
Set atoms.
Definition: hirshfeld.cpp:267
double get_range() const
Get the range of the atom.
Definition: hirshfeld.cpp:107
void compute(const BasisSet &basis, std::string method)
Compute.
Definition: hirshfeld.cpp:125
std::vector< std::vector< double > > get_rho() const
Get atomic densities.
Definition: hirshfeld.cpp:283
Basis set.
Definition: basis.h:187
Coordinates structure.
Definition: basis.h:50
double get_spacing() const
Get grid spacing.
Definition: hirshfeld.cpp:99
Hirshfeld atomic densities.
Definition: hirshfeld.h:59
Hirshfeld atomic density.
Definition: hirshfeld.h:28
std::vector< double > rho
Densities.
Definition: hirshfeld.h:32
double get_weight(size_t inuc, const coords_t &r) const
Evaluate weight at r.
Definition: hirshfeld.cpp:214