diff --git a/include/libint2/lcao/molden.h b/include/libint2/lcao/molden.h index c1fe18098..4e027258c 100644 --- a/include/libint2/lcao/molden.h +++ b/include/libint2/lcao/molden.h @@ -251,10 +251,6 @@ class Export { switch (contr.l) { case 1: - if (contr.pure) - throw std::logic_error( - "molden::Export cannot handle solid harmonics p shells"); - break; case 2: case 3: case 4: { @@ -300,19 +296,18 @@ class Export { const auto pure = shell.contr[c].pure; if (pure) { int m; - FOR_SOLIDHARM_MOLDEN(l, m) - const auto ao_in_shell = libint2::INT_SOLIDHARMINDEX(l, m); - ao_map_[ao_molden] = ao + ao_in_shell; - ++ao_molden; - END_FOR_SOLIDHARM_MOLDEN - ao += 2 * l + 1; - } else { - int i, j, k; - FOR_CART_MOLDEN(i, j, k, l) - const auto ao_in_shell = INT_CARTINDEX(l, i, j); - ao_map_[ao_molden] = ao + ao_in_shell; - ++ao_molden; - END_FOR_CART_MOLDEN + if (l == 1) { + ao_map_[ao_molden] = ao + 2; + ao_map_[ao_molden + 1] = ao; + ao_map_[ao_molden + 2] = ao + 1; + ao_molden += 3; + } else { + FOR_SOLIDHARM_MOLDEN(l, m) + const auto ao_in_shell = libint2::INT_SOLIDHARMINDEX(l, m); + ao_map_[ao_molden] = ao + ao_in_shell; + ++ao_molden; + END_FOR_SOLIDHARM_MOLDEN + } ao += INT_NCART(l); } } // contraction loop