87 static std::vector<Real> occvec(27, 0.0);
92 auto* occs_ptr = &occvec[0];
93 auto& occs = occs_ptr;
95 size_t num_of_electrons = Z;
99 subshell_occvec(occs, 1, num_of_electrons);
101 subshell_occvec(occs, 1, num_of_electrons);
102 subshell_occvec(occs, 3, num_of_electrons);
105 subshell_occvec(occs, 1, num_of_electrons);
106 subshell_occvec(occs, 3, num_of_electrons);
108 if (18 < Z && Z <= 36) {
110 size_t num_of_4s_electrons = (Z == 19 || Z == 24 || Z == 29) ? 1 : 2;
111 num_of_electrons -= num_of_4s_electrons;
112 subshell_occvec(occs, 1, num_of_4s_electrons);
114 size_t num_of_4p_electrons =
115 std::min(
static_cast<decltype(Z)
>(6), (Z > 30) ? Z - 30 : 0);
116 num_of_electrons -= num_of_4p_electrons;
117 subshell_occvec(occs, 3, num_of_4p_electrons);
119 subshell_occvec(occs, 5, num_of_electrons);
121 if (36 < Z && Z <= 53) {
123 subshell_occvec(occs, 1, num_of_electrons);
124 subshell_occvec(occs, 3, num_of_electrons);
127 size_t num_of_5s_electrons =
128 (Z == 37 || Z == 41 || Z == 42 || Z == 44 || Z == 45 || Z == 47) ? 1
130 num_of_electrons -= num_of_5s_electrons;
131 subshell_occvec(occs, 1, num_of_5s_electrons);
133 size_t num_of_5p_electrons =
134 std::min(
static_cast<decltype(Z)
>(6), (Z > 48) ? Z - 48 : 0);
135 num_of_electrons -= num_of_5p_electrons;
136 subshell_occvec(occs, 3, num_of_5p_electrons);
138 subshell_occvec(occs, 5, num_of_electrons);
139 subshell_occvec(occs, 5, num_of_electrons);
void subshell_occvec(Real *&occvec, size_t size, size_t &ne)
computes orbital occupation numbers for a subshell of size size created by smearing no more than ne e...
Definition sto3g_atomic_density.h:41
const std::vector< Real > & sto3g_ao_occupation_vector(size_t Z)
computes average orbital occupancies in the ground state of a neutral atoms
Definition sto3g_atomic_density.h:86