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