1 /*
2 
3 Copyright (C) 2007 Lucas K. Wagner
4 
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
9 
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 GNU General Public License for more details.
14 
15 You should have received a copy of the GNU General Public License along
16 with this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 
19 */
20 
21 #ifndef BASIS_WRITER_H_INCLUDED
22 #define BASIS_WRITER_H_INCLUDED
23 #include <string>
24 #include <vector>
25 #include <iostream>
26 
27 
28 class Basis_writer {
29  public:
30     std::string label;
31     virtual void print_basis(std::ostream & inputfile)=0;
32     virtual int nfunc()=0;
~Basis_writer()33     virtual ~Basis_writer() {}
34 };
35 
36 class Gaussian_basis_set:public Basis_writer {
37  public:
38   //std::string label;
39   std::vector <std::string> types;
40   std::vector < std::vector < double > > exponents;
41   std::vector < std::vector < double > > coefficients;
42   std::string options;//!< any options to pass to the basis function
43   double cutoff; //!< cutoff distance to enforce
44   virtual void print_basis(std::ostream & inputfile);
45   int nfunc();
Gaussian_basis_set()46   Gaussian_basis_set():cutoff(0.0) {}
47 
48 };
49 
50 
51 class Spline_basis_writer: public Basis_writer {
52 public:
53   //basis function #, radial values
54   std::vector < std::vector <double > > vals;
55   //basis function #, r-points at which it's defined
56   std::vector < std::vector <double> > rad;
57   //S,P, D, etc of the basis functions
58   virtual void print_basis(std::ostream & inputfile);
59   int nfunc();
60   std::vector <std::string> types;
61 
62 };
63 
64 class Pade_molecular_basis:public Basis_writer {
65  public:
66   virtual void print_basis(std::ostream & os);
67   int nfunc();
68 };
69 
70 
71 class Exponential_cusp_basis:public Basis_writer {
72  public:
73   virtual void print_basis(std::ostream & os);
74   int nfunc();
75 };
76 
77 
78 class Cutoff_cusp_basis:public Basis_writer {
79  public:
80   virtual void print_basis(std::ostream & os);
81   int nfunc();
82   double cutoff;
Cutoff_cusp_basis()83   Cutoff_cusp_basis() { cutoff=5.0; label="EE"; }
84 };
85 
86 class Poly_pade_basis:public Basis_writer {
87  public:
88   virtual void print_basis(std::ostream & os);
89   int nfunc();
90   double cutoff;
91   double beta0;
92   int nfunc_;
Poly_pade_basis()93   Poly_pade_basis() { cutoff=5.0; label="EE"; }
94 };
95 
96 
97 #endif
98