MCPcopy Create free account
hub / github.com/SZAILAB/MaterialDFT-Demo / build_ritz_vectors

Function build_ritz_vectors

cpp_core/src/eigensolver.cpp:151–179  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

149}
150
151void build_ritz_vectors(
152 const std::vector<std::vector<Complex>>& basis,
153 const std::vector<std::vector<Complex>>& h_basis,
154 const std::vector<Complex>& coeff_col_major,
155 int m,
156 int n_roots,
157 std::vector<std::vector<Complex>>* ritz_vectors,
158 std::vector<std::vector<Complex>>* h_ritz_vectors
159) {
160 if (!ritz_vectors || !h_ritz_vectors) {
161 throw std::invalid_argument("build_ritz_vectors: null output pointer");
162 }
163 const std::size_t n = basis.empty() ? 0 : basis[0].size();
164 ritz_vectors->assign(static_cast<std::size_t>(n_roots), std::vector<Complex>(n, Complex{0.0, 0.0}));
165 h_ritz_vectors->assign(static_cast<std::size_t>(n_roots), std::vector<Complex>(n, Complex{0.0, 0.0}));
166 for (int root = 0; root < n_roots; ++root) {
167 auto& x = (*ritz_vectors)[static_cast<std::size_t>(root)];
168 auto& hx = (*h_ritz_vectors)[static_cast<std::size_t>(root)];
169 for (int p = 0; p < m; ++p) {
170 const Complex c = coeff_col_major[static_cast<std::size_t>(p + m * root)];
171 const auto& vp = basis[static_cast<std::size_t>(p)];
172 const auto& hvp = h_basis[static_cast<std::size_t>(p)];
173 for (std::size_t i = 0; i < n; ++i) {
174 x[i] += c * vp[i];
175 hx[i] += c * hvp[i];
176 }
177 }
178 }
179}
180
181EigensystemResult pack_eigensystem_from_columns(
182 int n,

Callers 1

Calls 2

sizeMethod · 0.80
emptyMethod · 0.45

Tested by

no test coverage detected