ERKALE
ERKALE - DFT from Hel
 All Classes Functions Variables Friends Pages
basislibrary.h
1 /*
2  * This source code is part of
3  *
4  * E R K A L E
5  * -
6  * DFT from Hel
7  *
8  * Written by Susi Lehtola, 2010
9  * Copyright (c) 2010, 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 
18 #include "global.h"
19 
20 #ifndef ERKALE_BASISLIB
21 #define ERKALE_BASISLIB
22 
23 #include <armadillo>
24 #include <vector>
25 #include <string>
26 
27 #include "basis.h"
28 
30 arma::mat overlap(const arma::vec & z, const arma::vec & zp, int am);
31 
33 int find_am(char am);
34 
36 std::string find_basis(const std::string & filename, bool verbose=true);
37 
39 #ifndef ERKALE_SYSTEM_LIBRARY
40 #define ERKALE_SYSTEM_LIBRARY "/usr/share/erkale/basis"
41 #endif
42 
57  int am;
59  std::vector<contr_t> C;
60 
61  public:
63  FunctionShell(int am=-1);
65  FunctionShell(int am, const std::vector<contr_t> & c);
68 
70  void add_exponent(double C, double z);
72  bool operator<(const FunctionShell &rhs) const;
73 
75  int get_am() const;
76 
78  std::vector<contr_t> get_contr() const;
79 
81  void sort();
83  void normalize();
85  void print() const;
86 
87  friend class BasisSetLibrary;
88 };
89 
103 
105  std::string symbol;
107  size_t number;
109  std::vector<FunctionShell> bf;
110 
111  public:
113  ElementBasisSet();
115  ElementBasisSet(std::string sym, size_t number=0);
118 
120  void add_function(FunctionShell f);
122  void sort();
124  void print() const;
125 
127  std::string get_symbol() const;
129  size_t get_number() const;
131  void set_number(size_t num);
132 
134  bool operator<(const ElementBasisSet &rhs) const;
135 
137  std::vector<FunctionShell> get_shells() const;
139  std::vector<FunctionShell> get_shells(int am) const;
140 
142  void get_primitives(arma::vec & exps, arma::mat & coeffs, int am) const;
144  void get_primitives(arma::vec & zfree, arma::vec & zgen, arma::mat & cgen, int am) const;
145 
147  void orthonormalize();
148 
159  void P_orthogonalize(double cutoff=1e-8, double Cortho=1e-4);
160 
162  void prune(double cutoff=0.9, bool coulomb=false);
163 
165  void merge(double cutoff=0.9, bool verbose=true, bool coulomb=false);
166 
168  int get_max_am() const;
170  int get_am(size_t ind) const;
172  int get_Nbf() const;
173 
175  void normalize();
176 
178  void decontract();
188  ElementBasisSet density_fitting(int lmaxinc, double fsam) const;
195  ElementBasisSet product_set(int lmaxinc, double fsam) const;
196 
198  ElementBasisSet cholesky_set(double thr, int maxam, double ovlthr) const;
199 
201  void augment(int naug);
202 
203  friend class BasisSetLibrary;
204 };
205 
207 double P_innerprod_inout(const arma::vec & ai, const arma::mat & S, const arma::vec & aj, size_t P);
209 double P_innerprod_outin(const arma::vec & ai, const arma::mat & S, const arma::vec & aj, size_t P);
210 
212 size_t count_shared(const arma::vec & ai, const arma::vec & aj);
214 bool treated_inout(const arma::mat & c, size_t i, size_t j);
216 bool treated_outin(const arma::mat & c, size_t i, size_t j);
217 
232 
234  std::string name;
236  std::vector<ElementBasisSet> elements;
237 
238  public:
240  BasisSetLibrary();
243 
245  void load_basis(const std::string & filename, bool verbose=true);
246 
248  void load_gaussian94(const std::string & filename, bool verbose=true);
250  void save_gaussian94(const std::string & filename, bool append=false) const;
251 
253  void save_cfour(const std::string & filename, const std::string & basisname, bool newformat=true, bool append=false) const;
255  void save_dalton(const std::string & filename, bool append=false) const;
257  void save_molpro(const std::string & filename, bool append=false) const;
258 
260  void add_element(const ElementBasisSet & el);
261 
263  void sort();
264 
266  size_t get_Nel() const;
268  std::string get_symbol(size_t ind) const;
270  std::vector<ElementBasisSet> get_elements() const;
271 
273  int get_max_am() const;
274 
276  ElementBasisSet get_element(std::string el, size_t number=0) const;
277 
279  void normalize();
280 
282  void orthonormalize();
283 
285  void decontract();
286 
288  BasisSetLibrary density_fitting(int lvalinc, double fsam) const;
290  BasisSetLibrary product_set(int lvalinc, double fsam) const;
292  BasisSetLibrary cholesky_set(double thr, int maxam, double ovlthr) const;
293 
301  void P_orthogonalize(double cutoff=1e-8, double Cortho=1e-4);
302 
304  void merge(double cutoff=0.9, bool verbose=true);
305 
307  void augment(int naug);
308 
310  void print() const;
311 };
312 
313 
314 #endif
void save_gaussian94(const std::string &filename, bool append=false) const
Save basis set to file in Gaussian&#39;94 format.
Definition: basislibrary.cpp:1623
std::string get_symbol() const
Get the symbol of the element.
Definition: basislibrary.cpp:342
void save_cfour(const std::string &filename, const std::string &basisname, bool newformat=true, bool append=false) const
Save basis set to file in CFOUR format.
Definition: basislibrary.cpp:1657
void get_primitives(arma::vec &exps, arma::mat &coeffs, int am) const
Get exponents and contraction coefficients of angular momentum shell am.
Definition: basislibrary.cpp:378
size_t get_number() const
Get the number.
Definition: basislibrary.cpp:346
void augment(int naug)
Augment the basis.
Definition: basislibrary.cpp:1146
void normalize()
Normalize coefficients.
Definition: basislibrary.cpp:329
void prune(double cutoff=0.9, bool coulomb=false)
Prune primitives with large overlap, replacing them with the geometric average.
Definition: basislibrary.cpp:1174
BasisSetLibrary density_fitting(int lvalinc, double fsam) const
Generate density fitting set.
Definition: basislibrary.cpp:2167
void normalize()
Normalize coefficients.
Definition: basislibrary.cpp:2096
std::vector< contr_t > C
Exponential contraction.
Definition: basislibrary.h:59
void merge(double cutoff=0.9, bool verbose=true, bool coulomb=false)
Merge primitives with large overlap (also decontracts basis). This routine is intended to merging cor...
Definition: basislibrary.cpp:1219
std::string symbol
Symbol of element.
Definition: basislibrary.h:105
ElementBasisSet get_element(std::string el, size_t number=0) const
Get basis set for wanted element.
Definition: basislibrary.cpp:2127
void normalize()
Normalize coefficients.
Definition: basislibrary.cpp:247
int am
Angular momentum.
Definition: basislibrary.h:57
void P_orthogonalize(double cutoff=1e-8, double Cortho=1e-4)
Definition: basislibrary.cpp:918
void add_function(FunctionShell f)
Add a shell of functions to the basis.
Definition: basislibrary.cpp:317
BasisSetLibrary product_set(int lvalinc, double fsam) const
Generate product set.
Definition: basislibrary.cpp:2175
void save_dalton(const std::string &filename, bool append=false) const
Save basis set to file in Dalton format.
Definition: basislibrary.cpp:1950
size_t number
Atom id for which the basis is for (0 for all atoms)
Definition: basislibrary.h:107
BasisSetLibrary()
Constructor.
Definition: basislibrary.cpp:1354
void load_gaussian94(const std::string &filename, bool verbose=true)
Load basis set from file in Gaussian&#39;94 format.
Definition: basislibrary.cpp:1444
Basis set library class.
Definition: basislibrary.h:231
bool operator<(const ElementBasisSet &rhs) const
Comparison operator for sorting.
Definition: basislibrary.cpp:354
System default location for basis sets.
Definition: basislibrary.h:55
int get_max_am() const
Get maximum angular momentum used in the shells.
Definition: basislibrary.cpp:455
~ElementBasisSet()
Destructor.
Definition: basislibrary.cpp:314
std::string get_symbol(size_t ind) const
Get symbol of ind&#39;th element.
Definition: basislibrary.cpp:2106
ElementBasisSet cholesky_set(double thr, int maxam, double ovlthr) const
Form compact Cholesky set.
Definition: basislibrary.cpp:709
Basis set for an element.
Definition: basislibrary.h:102
void decontract()
Decontract set.
Definition: basislibrary.cpp:467
~BasisSetLibrary()
Destructor.
Definition: basislibrary.cpp:1357
int get_Nbf() const
Get amount of functions.
Definition: basislibrary.cpp:371
std::vector< contr_t > get_contr() const
Get contraction coefficients.
Definition: basislibrary.cpp:299
ElementBasisSet()
Dummy constructor.
Definition: basislibrary.cpp:303
void sort()
Sort library.
Definition: basislibrary.cpp:2088
void print() const
Print out basis set.
Definition: basislibrary.cpp:334
void set_number(size_t num)
Set the number.
Definition: basislibrary.cpp:350
FunctionShell(int am=-1)
Construct a shell with angular momentum am.
Definition: basislibrary.cpp:182
int get_am(size_t ind) const
Get angular momentum of i:th shell.
Definition: basislibrary.cpp:463
int get_am() const
Get angular momentum.
Definition: basislibrary.cpp:295
void add_element(const ElementBasisSet &el)
Add element to basis set.
Definition: basislibrary.cpp:2084
~FunctionShell()
Destructor.
Definition: basislibrary.cpp:211
int get_max_am() const
Get maximum angular momentum used in basis set.
Definition: basislibrary.cpp:2114
ElementBasisSet density_fitting(int lmaxinc, double fsam) const
Definition: basislibrary.cpp:502
void augment(int naug)
Augment the basis.
Definition: basislibrary.cpp:2201
std::vector< FunctionShell > get_shells() const
Get the shells.
Definition: basislibrary.cpp:358
std::vector< FunctionShell > bf
List of shells.
Definition: basislibrary.h:109
std::string name
Name of basis set.
Definition: basislibrary.h:234
void orthonormalize()
Orthonormalize generally contracted functions. NB! This can screw up your computational efficiency! ...
Definition: basislibrary.cpp:2191
void P_orthogonalize(double cutoff=1e-8, double Cortho=1e-4)
Definition: basislibrary.cpp:2196
size_t get_Nel() const
Get number of elements.
Definition: basislibrary.cpp:2102
void print() const
Print out info.
Definition: basislibrary.cpp:275
BasisSetLibrary cholesky_set(double thr, int maxam, double ovlthr) const
Generate compact Cholesky set.
Definition: basislibrary.cpp:2183
void sort()
Sort exponents in decreasing order.
Definition: basislibrary.cpp:241
std::vector< ElementBasisSet > get_elements() const
Get elements.
Definition: basislibrary.cpp:2110
void sort()
Sort the shells in decreasing angular momentum.
Definition: basislibrary.cpp:321
void load_basis(const std::string &filename, bool verbose=true)
Load basis set from file in Gaussian&#39;94 format. Handles parsing for special Pople sets...
Definition: basislibrary.cpp:1401
void orthonormalize()
Orthonormalize generally contracted functions. NB! This can screw up your computational efficiency! ...
Definition: basislibrary.cpp:833
void decontract()
Decontract basis set.
Definition: basislibrary.cpp:2161
void print() const
Print out library.
Definition: basislibrary.cpp:2122
bool operator<(const FunctionShell &rhs) const
Comparison operator for ordering in decreasing angular momentum and exponent.
Definition: basislibrary.cpp:281
std::vector< ElementBasisSet > elements
List of elements included in basis set.
Definition: basislibrary.h:236
ElementBasisSet product_set(int lmaxinc, double fsam) const
Definition: basislibrary.cpp:607
void merge(double cutoff=0.9, bool verbose=true)
Merge primitives with large overlap (also decontracts basis)
Definition: basislibrary.cpp:2209
void add_exponent(double C, double z)
Add exponent into contraction.
Definition: basislibrary.cpp:214
void save_molpro(const std::string &filename, bool append=false) const
Save basis set to file in Molpro format.
Definition: basislibrary.cpp:2021