5 void Nevanlinna_kernel::init(nda::vector_const_view<std::complex<double>> mesh, nda::array_const_view<std::complex<double>, 3> data) {
6 _factorizations.clear();
7 size_t N = data.shape()[1];
8 size_t nw = std::count_if(mesh.begin(), mesh.end(), [](
const std::complex<double> &w) { return w.imag() > 0; });
9 nda::vector<std::complex<double>> data_in(nw);
10 nda::vector<std::complex<double>> mesh_in(nw);
12 for (
size_t n = 0; n < N; ++n) {
13 for (
size_t iw = 0, iww = 0; iw < mesh.shape()[0]; ++iw) {
14 if (mesh(iw).imag() < 0)
continue;
15 data_in(iww) = data(iw, n, n);
16 mesh_in(iww) = mesh(iw);
20 f.
build(mesh_in, data_in);
21 _factorizations.push_back(f);
30 nda::array_const_view<std::complex<double>, 3> theta) {
31 nda::array<std::complex<double>, 3> results(grid.shape()[0], size(), size());
32 nda::vector<std::complex<double>> theta_(theta.shape()[0]);
33 for (
size_t n = 0; n < size(); ++n) {
34 for (
size_t iwm = 0; iwm < theta.shape()[0]; ++iwm) { theta_(iwm) = theta(iwm, n, n); }
35 nda::vector<std::complex<double>> data = _factorizations[n].evaluate(grid, theta_);
36 for (
size_t iw = 0; iw < grid.shape()[0]; ++iw) { results(iw, n, n) = data(iw); }
void init(nda::vector_const_view< std::complex< double > > mesh, nda::array_const_view< std::complex< double >, 3 > data) override
Initialize the diagonal Nevanlinna continuation from Matsubara-frequency input data.