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