Scine::Sparrow  5.0.0
Library for fast and agile quantum chemical calculations with semiempirical methods.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Pages
DFTBCommon.h
Go to the documentation of this file.
1 
8 #ifndef SPARROW_DFTBCOMMON_H
9 #define SPARROW_DFTBCOMMON_H
10 
11 #include "SKAtom.h"
12 #include "SKPair.h"
15 #include <Utils/Typenames.h>
16 #include <Eigen/Core>
17 #include <array>
18 #include <boost/functional/hash.hpp>
19 #include <memory>
20 #include <vector>
21 
22 namespace Scine {
23 namespace Utils {
24 class MatrixWithDerivatives;
25 class SingleParticleEnergies;
26 class AtomsOrbitalsIndexes;
27 class DensityMatrix;
28 } // namespace Utils
29 namespace Sparrow {
30 
31 namespace dftb {
32 
34  public:
35  using AtomicParameterContainer = std::vector<std::unique_ptr<SKAtom>>;
36  using DiatomicParameterKey = std::pair<int, int>;
37  using DiatomicParameterContainer = std::unordered_map<DiatomicParameterKey, SKPair, boost::hash<DiatomicParameterKey>>;
38 
39  DFTBCommon(const Utils::ElementTypeCollection& elements, int& nEl, int& charge, AtomicParameterContainer& atomicPar,
40  DiatomicParameterContainer& diatomicPar);
41  ~DFTBCommon() override;
42  void initialize(const std::string& path, unsigned dftbType); // TODO: delete.
43  void setMethodDetails(const std::string& path, unsigned dftbType);
44  void initialize(const Utils::ElementTypeCollection& elementTypes) override;
45 
46  void reinitializeParameters();
47 
48  unsigned getnAOs() const {
49  return nAOs;
50  }
51  bool hasHubbardDerivatives() const {
52  return DFTB3Possible;
53  }
54  bool unrestrictedCalculationPossible() const override;
55  const DiatomicParameterContainer& getPairParameters() const {
56  return pairParameters;
57  }
58  std::vector<double> getCoreCharges() const override {
59  return coreCharges_;
60  }
61  Utils::AtomsOrbitalsIndexes getAtomsOrbitalsIndexes() const override {
62  return aoIndexes_;
63  }
64  unsigned getNumberElectronsForUnchargedSpecies() const override {
65  return nInitialElectrons_;
66  }
67 
68  private:
69  static constexpr int nElements_ = 110;
70 
71  std::vector<bool> atomTypePresent; // tells if atomType present in the structure
72  AtomicParameterContainer& atomParameters; // parameters for atoms
73  DiatomicParameterContainer& pairParameters; // List of pointers to parameters
74 
75  unsigned nAOs; // Total number of Atomic orbitals
76  unsigned nAtoms; // Total number of atoms
77  int& nElectrons_; // Total number of electrons
78  unsigned nInitialElectrons_; // initial number of electrons
79  int& molecularCharge_;
80  double noInteractionEnergy; // sum of energies of isolated atoms
81  bool spinPolarizedPossible; // tells if parameters for SDFTB are present
82  bool DFTB3Possible; // tells if parameters for DFTB3 are present
83  std::vector<double> coreCharges_;
84  Utils::AtomsOrbitalsIndexes aoIndexes_;
85  Utils::ElementTypeCollection elementTypes_;
86 
87  std::string path_;
88  unsigned dftbType_;
89 };
90 
91 } // namespace dftb
92 
93 } // namespace Sparrow
94 } // namespace Scine
95 #endif // DFTBCOMMON_H
Definition: DFTBCommon.h:33