| 835 | } |
| 836 | |
| 837 | double signed_weighted_eigenvalue_change( |
| 838 | const std::vector<std::vector<double>>& old_eigenvalues_by_k, |
| 839 | const std::vector<std::vector<double>>& new_eigenvalues_by_k, |
| 840 | const std::vector<std::vector<double>>& occupations_by_k, |
| 841 | double fallback_ha |
| 842 | ) { |
| 843 | if (old_eigenvalues_by_k.size() != new_eigenvalues_by_k.size() |
| 844 | || old_eigenvalues_by_k.size() != occupations_by_k.size()) { |
| 845 | return fallback_ha; |
| 846 | } |
| 847 | double sum = 0.0; |
| 848 | for (std::size_t ik = 0; ik < new_eigenvalues_by_k.size(); ++ik) { |
| 849 | if (old_eigenvalues_by_k[ik].size() != new_eigenvalues_by_k[ik].size() |
| 850 | || occupations_by_k[ik].size() != new_eigenvalues_by_k[ik].size()) { |
| 851 | return fallback_ha; |
| 852 | } |
| 853 | for (std::size_t band = 0; band < new_eigenvalues_by_k[ik].size(); ++band) { |
| 854 | sum += occupations_by_k[ik][band] |
| 855 | * (new_eigenvalues_by_k[ik][band] - old_eigenvalues_by_k[ik][band]); |
| 856 | } |
| 857 | } |
| 858 | return sum; |
| 859 | } |
| 860 | |
| 861 | double abs_weighted_eigenvalue_change( |
| 862 | const std::vector<std::vector<double>>& old_eigenvalues_by_k, |
no test coverage detected