1 /* 2 * This source code is part of 3 * 4 * HelFEM 5 * - 6 * Finite element methods for electronic structure calculations on small systems 7 * 8 * Written by Susi Lehtola, 2018- 9 * Copyright (c) 2018- 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 #ifndef ATOMIC_BASIS_H 17 #define ATOMIC_BASIS_H 18 19 #include <armadillo> 20 #include "polynomial_basis.h" 21 #include "../general/model_potential.h" 22 #include "../general/sap.h" 23 #include <helfem/RadialBasis.h> 24 #include "TwoDBasis.h" 25 26 namespace helfem { 27 namespace atomic { 28 namespace basis { 29 /// Get the element grid for a normal calculation 30 arma::vec normal_grid(int num_el, double rmax, int igrid, double zexp); 31 /// Get the element grid for a finite nucleus 32 arma::vec finite_nuclear_grid(int num_el, double rmax, int igrid, double zexp, int num_el_nuc, double rnuc, int igrid_nuc, double zexp_nuc); 33 /// Get the element grid in the case of off-center nuclei 34 arma::vec offcenter_nuclear_grid(int num_el0, int Zm, int Zlr, double Rhalf, int num_el, double rmax, int igrid, double zexp); 35 /// Form the grid in the general case, using the above routines 36 arma::vec form_grid(modelpotential::nuclear_model_t model, double Rrms, int Nelem, double Rmax, int igrid, double zexp, int Nelem0, int igrid0, double zexp0, int Z, int Zl, int Zr, double Rhalf); 37 38 /// Constructs an angular basis 39 void angular_basis(int lmax, int mmax, arma::ivec & lval, arma::ivec & mval); 40 } 41 } 42 } 43 44 45 #endif 46