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
AtomicParameters.h
Go to the documentation of this file.
1 
8 #ifndef SPARROW_MNDOTYPEATOMICPARAMETERS_H
9 #define SPARROW_MNDOTYPEATOMICPARAMETERS_H
10 
16 #include <cmath>
17 #include <tuple>
18 #include <utility>
19 
20 namespace Scine {
21 namespace Sparrow {
22 namespace nddo {
23 
30  public:
31  explicit AtomicParameters(Utils::ElementType e = Utils::ElementType::none,
32  BasisFunctions basisFunctions = BasisFunctions::spd) {
33  setElement(e, basisFunctions);
34  }
35 
37  bool isValid() const {
38  return e_ != Utils::ElementType::none;
39  }
40 
41  void setElement(Utils::ElementType e, BasisFunctions basisFunctions = BasisFunctions::spd) {
42  e_ = e;
43  setNAOs(PM6Elements::getNumberOfAOs(e, basisFunctions));
44  setCoreCharge(PM6Elements::getCoreCharge(e));
45  }
46 
47  Utils::ElementType element() const {
48  return e_;
49  }
50 
51  void setGTOs(Utils::AtomicGtos gtos) {
52  gtos_ = std::move(gtos);
53  }
54 
55  const Utils::AtomicGtos& GTOs() const {
56  return gtos_;
57  }
58 
59  void setNAOs(int n) {
60  nAOs_ = n;
61  }
62 
63  int nAOs() const {
64  return nAOs_;
65  }
66 
67  void setCoreCharge(double c) {
68  coreCharge_ = c;
69  coreCharge13_ = std::pow(c, 1. / 3.);
70  }
71 
72  double coreCharge() const {
73  return coreCharge_;
74  }
75 
76  double cubicRootOfCoreCharge() const {
77  return coreCharge13_;
78  }
79 
80  void setBetaS(double v) {
81  betaS_ = v;
82  }
83 
84  void setBetaP(double v) {
85  betaP_ = v;
86  }
87 
88  void setBetaD(double v) {
89  betaD_ = v;
90  }
91 
92  double betaS() const {
93  return betaS_;
94  }
95 
96  double betaP() const {
97  return betaP_;
98  }
99 
100  double betaD() const {
101  return betaD_;
102  }
103 
104  void setUss(double v) {
105  Uss_ = v;
106  }
107 
108  void setUpp(double v) {
109  Upp_ = v;
110  }
111 
112  void setUdd(double v) {
113  Udd_ = v;
114  }
115 
116  double Uss() const {
117  return Uss_;
118  }
119 
120  double Upp() const {
121  return Upp_;
122  }
123 
124  double Udd() const {
125  return Udd_;
126  }
127 
128  double alpha() const {
129  return alpha_;
130  }
131 
132  void setAlpha(double v) {
133  alpha_ = v;
134  }
135 
136  void setPCore(double p) {
137  pCore_ = p;
138  }
139 
140  double pCore() const {
141  return pCore_;
142  }
143 
144  bool pCoreSpecified() const {
145  return pCoreSpecified_;
146  }
147 
148  void setPCoreSpecified(bool b) {
149  pCoreSpecified_ = b;
150  }
151 
152  void setKlopmanParameters(const multipole::KlopmanParameter& k) {
153  klopman_ = k;
154  }
155 
156  const multipole::KlopmanParameter& klopmanParameters() const {
157  return klopman_;
158  }
159 
160  void setChargeSeparations(const multipole::ChargeSeparationParameter& d) {
161  chargeSep_ = d;
162  }
163 
164  const multipole::ChargeSeparationParameter& chargeSeparations() const {
165  return chargeSep_;
166  }
167 
168  void addGaussianRepulsionParameters(double a, double b, double c) {
169  gaussianRepulsionParameters_.emplace_back(a, b, c);
170  hasGaussianRepulsionParameters_ = true;
171  }
172 
173  bool hasGaussianRepulsionParameters() const {
174  return hasGaussianRepulsionParameters_;
175  }
176 
177  const std::vector<std::tuple<double, double, double>>& getGaussianRepulsionParameters() const {
178  return gaussianRepulsionParameters_;
179  }
180 
181  void clearGaussianRepulsionParameters() {
182  gaussianRepulsionParameters_.clear();
183  }
184 
185  private:
186  Utils::ElementType e_{Utils::ElementType::none};
187  int nAOs_{0};
188  double coreCharge_{0.};
189  double coreCharge13_{}; // cubic root of coreCharge_
190  Utils::AtomicGtos gtos_{};
191  double betaS_{0.}, betaP_{0.}, betaD_{0.};
192  double Uss_{0.}, Upp_{0.}, Udd_{0.};
193  double alpha_{0.};
194  double pCore_{0.};
195  bool hasGaussianRepulsionParameters_{false};
196  std::vector<std::tuple<double, double, double>> gaussianRepulsionParameters_{}; // NB: make sure they have units
197  // compatible with formula so that R
198  // does not need to be converted to
199  // another unit!
200  multipole::KlopmanParameter klopman_{};
201  multipole::ChargeSeparationParameter chargeSep_{};
202  bool pCoreSpecified_{false};
203 };
204 
205 } // namespace nddo
206 } // namespace Sparrow
207 } // namespace Scine
208 
209 #endif // SPARROW_MNDOTYPEATOMICPARAMETERS_H
Definition: AtomicParameters.h:29
bool isValid() const
Definition: AtomicParameters.h:37