| 494 | } |
| 495 | |
| 496 | void prepare_generalized_initial_subspace( |
| 497 | const std::vector<Complex>& initial_subspace, |
| 498 | const std::vector<double>& kinetic_diag, |
| 499 | int n_pw, |
| 500 | int n_bands, |
| 501 | bool caller_supplies_s_orthonormal_subspace, |
| 502 | const HamiltonianOp& s_op, |
| 503 | std::vector<Complex>* states |
| 504 | ) { |
| 505 | if (has_complete_initial_subspace(initial_subspace, n_pw, n_bands)) { |
| 506 | states->assign(initial_subspace.begin(), initial_subspace.end()); |
| 507 | if (!caller_supplies_s_orthonormal_subspace) { |
| 508 | require_s_orthonormal_initial_subspace( |
| 509 | states, n_pw, n_bands, s_op, "supplied"); |
| 510 | } |
| 511 | return; |
| 512 | } |
| 513 | |
| 514 | fill_kinetic_ordered_seed_subspace(kinetic_diag, n_pw, n_bands, states); |
| 515 | require_s_orthonormal_initial_subspace( |
| 516 | states, n_pw, n_bands, s_op, "generated"); |
| 517 | } |
| 518 | |
| 519 | struct LocalEigenvalueDeltaPolicy { |
| 520 | double absolute_break_ha = 2.5e-8 * EV_TO_HA; |
no test coverage detected