void compute_Tnl_legendre(int n_matsubara, int n_legendre, boost::multi_array<std::complex<double>,2> &Tnl) { double sign_tmp = 1.0; Tnl.resize(boost::extents[n_matsubara][n_legendre]); for (int im = 0; im < n_matsubara; ++im) { std::complex<double> ztmp(0.0, 1.0); for (int il = 0; il < n_legendre; ++il) { Tnl[im][il] = sign_tmp * ztmp * std::sqrt(2 * il + 1.0) * boost::math::sph_bessel(il, 0.5 * (2 * im + 1) * M_PI); ztmp *= std::complex<double>(0.0, 1.0); } sign_tmp *= -1; } }
Zones(const bitmap &src, const unit_t window_size) : _Zones( Zone::MetaPatchFor(src,window_size) ), W( width.x ), H( width.y ) { _Zones &self = *this; const vertex count(W,H); for(unit_t j=0;j<H;++j) { for(unit_t i=0;i<W;++i) { const vertex indx(i,j); Zone ztmp(src,indx,count); bswap(ztmp,self[j][i]); self[j][i].allocate(); } } }
inline void Band::set_fv_h_o_apw_lo(K_point* kp, Atom_type const& type, Atom const& atom, int ia, mdarray<double_complex, 2>& alm_row, // alm_row comes conjugated mdarray<double_complex, 2>& alm_col, mdarray<double_complex, 2>& h, mdarray<double_complex, 2>& o) const { /* apw-lo block */ for (int i = 0; i < kp->num_atom_lo_cols(ia); i++) { int icol = kp->lo_col(ia, i); /* local orbital indices */ int l = kp->gklo_basis_descriptor_col(icol).l; int lm = kp->gklo_basis_descriptor_col(icol).lm; int idxrf = kp->gklo_basis_descriptor_col(icol).idxrf; int order = kp->gklo_basis_descriptor_col(icol).order; /* loop over apw components */ for (int j1 = 0; j1 < type.mt_aw_basis_size(); j1++) { int lm1 = type.indexb(j1).lm; int idxrf1 = type.indexb(j1).idxrf; double_complex zsum = atom.radial_integrals_sum_L3<spin_block_t::nm>(idxrf, idxrf1, gaunt_coefs_->gaunt_vector(lm1, lm)); if (std::abs(zsum) > 1e-14) { for (int igkloc = 0; igkloc < kp->num_gkvec_row(); igkloc++) { h(igkloc, icol) += zsum * alm_row(igkloc, j1); } } } for (int order1 = 0; order1 < (int)type.aw_descriptor(l).size(); order1++) { for (int igkloc = 0; igkloc < kp->num_gkvec_row(); igkloc++) { o(igkloc, icol) += atom.symmetry_class().o_radial_integral(l, order1, order) * alm_row(igkloc, type.indexb_by_lm_order(lm, order1)); } } } std::vector<double_complex> ztmp(kp->num_gkvec_col()); /* lo-apw block */ for (int i = 0; i < kp->num_atom_lo_rows(ia); i++) { int irow = kp->lo_row(ia, i); /* local orbital indices */ int l = kp->gklo_basis_descriptor_row(irow).l; int lm = kp->gklo_basis_descriptor_row(irow).lm; int idxrf = kp->gklo_basis_descriptor_row(irow).idxrf; int order = kp->gklo_basis_descriptor_row(irow).order; std::memset(&ztmp[0], 0, kp->num_gkvec_col() * sizeof(double_complex)); /* loop over apw components */ for (int j1 = 0; j1 < type.mt_aw_basis_size(); j1++) { int lm1 = type.indexb(j1).lm; int idxrf1 = type.indexb(j1).idxrf; double_complex zsum = atom.radial_integrals_sum_L3<spin_block_t::nm>(idxrf1, idxrf, gaunt_coefs_->gaunt_vector(lm, lm1)); if (std::abs(zsum) > 1e-14) { for (int igkloc = 0; igkloc < kp->num_gkvec_col(); igkloc++) { ztmp[igkloc] += zsum * alm_col(igkloc, j1); } } } for (int igkloc = 0; igkloc < kp->num_gkvec_col(); igkloc++) { h(irow, igkloc) += ztmp[igkloc]; } for (int order1 = 0; order1 < (int)type.aw_descriptor(l).size(); order1++) { for (int igkloc = 0; igkloc < kp->num_gkvec_col(); igkloc++) { o(irow, igkloc) += atom.symmetry_class().o_radial_integral(l, order, order1) * alm_col(igkloc, type.indexb_by_lm_order(lm, order1)); } } } }