|
| | Ewald_Vq () |
| |
| | ~Ewald_Vq () |
| |
| void | init (const UnitCell &ucell, const LCAO_Orbitals &orb, const MPI_Comm &mpi_comm_in, const K_Vectors *kv_in, std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > &lcaos_in, std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > &abfs_in, const std::map< Conv_Coulomb_Pot_K::Coulomb_Type, std::vector< std::map< std::string, std::string > > > &coulomb_param_in, std::shared_ptr< ORB_gaunt_table > MGT_in, const double &ccp_rmesh_times_in, const double &kmesh_times_in) |
| |
| void | init_ions (const UnitCell &ucell, const std::array< Tcell, Ndim > &period_Vs_NAO) |
| |
| double | get_singular_chi (const UnitCell &ucell, const std::vector< std::map< std::string, std::string > > ¶m_list, const double &qdiv) |
| |
| std::map< TA, std::map< TAK, RI::Tensor< std::complex< double > > > > | cal_Vq (const UnitCell &ucell, const double &chi, std::map< TA, std::map< TAC, RI::Tensor< Tdata > > > &Vs_in) |
| |
| std::map< TA, std::map< TAK, std::array< RI::Tensor< std::complex< double > >, Ndim > > > | cal_dVq (const UnitCell &ucell, const double &chi, std::map< TA, std::map< TAC, std::array< RI::Tensor< Tdata >, Ndim > > > &dVs_in) |
| |
| std::map< TA, std::map< TAC, RI::Tensor< Tdata > > > | cal_Vs (const UnitCell &ucell, const double &chi, std::map< TA, std::map< TAC, RI::Tensor< Tdata > > > &Vs_in) |
| |
| std::map< TA, std::map< TAC, std::array< RI::Tensor< Tdata >, Ndim > > > | cal_dVs (const UnitCell &ucell, const double &chi, std::map< TA, std::map< TAC, std::array< RI::Tensor< Tdata >, Ndim > > > &dVs_in) |
| |
| template<typename Tresult > |
| auto | set_Vs_dVs_minus_gauss (const UnitCell &ucell, const std::vector< TA > &list_A0, const std::vector< TAC > &list_A1, std::map< TA, std::map< TAC, Tresult > > &Vs_dVs_in, std::map< TA, std::map< TAC, Tresult > > &Vs_dVs_gauss_in) -> std::map< TA, std::map< TAC, Tresult > > |
| |
| template<typename Tresult > |
| auto | set_Vq_dVq_gauss (const UnitCell &ucell, const std::vector< TA > &list_A0_k, const std::vector< TAK > &list_A1_k, const int &shift_for_mpi, const T_func_DPget_Vq_dVq< Tresult > &func_DPget_Vq_dVq) -> std::map< TA, std::map< TAK, Tresult > > |
| |
| template<typename Tout , typename Tin > |
| auto | set_Vq_dVq_minus_gauss (const UnitCell &ucell, const std::vector< TA > &list_A0, const std::vector< TAC > &list_A1, std::map< TA, std::map< TAC, Tin > > &Vs_dVs_minus_gauss) -> std::map< TA, std::map< TAK, Tout > > |
| |
| template<typename Tout , typename Tin > |
| auto | set_Vq_dVq (const UnitCell &ucell, const std::vector< TA > &list_A0_pair_k, const std::vector< TAK > &list_A1_pair_k, std::map< TA, std::map< TAC, Tin > > &Vs_dVs_minus_gauss_in, const T_func_DPcal_Vq_dVq_minus_gauss< Tout, Tin > &func_cal_Vq_dVq_minus_gauss, const T_func_DPcal_Vq_dVq_gauss< Tout > &func_cal_Vq_dVq_gauss) -> std::map< TA, std::map< TAK, Tout > > |
| |
| template<typename Tout , typename Tin > |
| auto | set_Vs_dVs (const UnitCell &ucell, const std::vector< TA > &list_A0_pair_R, const std::vector< TAC > &list_A1_pair_R, std::map< TA, std::map< TAK, Tin > > &Vq) -> std::map< TA, std::map< TAC, Tout > > |
| |
|
| using | TA = int |
| | The Ewald summation decomposes the bare Coulomb interaction into two components: the short-range contribution, evaluated in real space, and the long-range contribution, computed in reciprocal space. A similar strategy can be employed for calculating four-center full-range Coulomb integrals Vq = (\psi\psi|1/r|\psi\psi) in reciprocal space. To use:
|
| |
| using | Tcell = int |
| |
| using | TC = std::array< Tcell, Ndim > |
| |
| using | TAC = std::pair< TA, TC > |
| |
| using | TK = std::array< int, 1 > |
| |
| using | TAK = std::pair< TA, TK > |
| |
| template<typename Tresult > |
| using | T_func_DPget_Vq_dVq = std::function< Tresult(const int &lp_max, const int &lq_max, const size_t &ik, const ModuleBase::Vector3< double > &tau)> |
| |
| template<typename Tout , typename Tin > |
| using | T_func_DPcal_Vq_dVq_minus_gauss = std::function< std::map< TA, std::map< TAK, Tout > >(std::map< TA, std::map< TAC, Tin > > &Vs_dVs_minus_gauss)> |
| |
| template<typename Tout > |
| using | T_func_DPcal_Vq_dVq_gauss = std::function< std::map< TA, std::map< TAK, Tout > >(const int &shift_for_mpi)> |
| |
|
| std::map< TA, std::map< TAC, RI::Tensor< Tdata > > > | cal_Vs_gauss (const UnitCell &ucell, const std::vector< TA > &list_A0, const std::vector< TAC > &list_A1) |
| |
| std::map< TA, std::map< TAC, std::array< RI::Tensor< Tdata >, Ndim > > > | cal_dVs_gauss (const UnitCell &ucell, const std::vector< TA > &list_A0, const std::vector< TAC > &list_A1) |
| |
| std::map< TA, std::map< TAC, RI::Tensor< Tdata > > > | cal_Vs_minus_gauss (const UnitCell &ucell, const std::vector< TA > &list_A0, const std::vector< TAC > &list_A1, std::map< TA, std::map< TAC, RI::Tensor< Tdata > > > &Vs_in) |
| |
| std::map< TA, std::map< TAC, std::array< RI::Tensor< Tdata >, Ndim > > > | cal_dVs_minus_gauss (const UnitCell &ucell, const std::vector< TA > &list_A0, const std::vector< TAC > &list_A1, std::map< TA, std::map< TAC, std::array< RI::Tensor< Tdata >, Ndim > > > &dVs_in) |
| |
| template<typename Tresult > |
| std::map< TA, std::map< TAC, Tresult > > | set_Vs_dVs_minus_gauss (const UnitCell &ucell, const std::vector< TA > &list_A0, const std::vector< TAC > &list_A1, std::map< TA, std::map< TAC, Tresult > > &Vs_dVs_in, std::map< TA, std::map< TAC, Tresult > > &Vs_dVs_gauss_in) |
| |
| std::map< TA, std::map< TAK, RI::Tensor< std::complex< double > > > > | cal_Vq_gauss (const UnitCell &ucell, const std::vector< TA > &list_A0_k, const std::vector< TAK > &list_A1_k, const double &chi, const int &shift_for_mpi) |
| |
| std::map< TA, std::map< TAK, std::array< RI::Tensor< std::complex< double > >, Ndim > > > | cal_dVq_gauss (const UnitCell &ucell, const std::vector< TA > &list_A0_k, const std::vector< TAK > &list_A1_k, const double &chi, const int &shift_for_mpi) |
| |
| template<typename Tresult > |
| std::map< TA, std::map< TAK, Tresult > > | set_Vq_dVq_gauss (const UnitCell &ucell, const std::vector< TA > &list_A0_k, const std::vector< TAK > &list_A1_k, const int &shift_for_mpi, const T_func_DPget_Vq_dVq< Tresult > &func_DPget_Vq_dVq) |
| |
| std::map< TA, std::map< TAK, RI::Tensor< std::complex< double > > > > | cal_Vq_minus_gauss (const UnitCell &ucell, const std::vector< TA > &list_A0, const std::vector< TAC > &list_A1, std::map< TA, std::map< TAC, RI::Tensor< Tdata > > > &Vs_minus_gauss) |
| |
| std::map< TA, std::map< TAK, std::array< RI::Tensor< std::complex< double > >, Ndim > > > | cal_dVq_minus_gauss (const UnitCell &ucell, const std::vector< TA > &list_A0, const std::vector< TAC > &list_A1, std::map< TA, std::map< TAC, std::array< RI::Tensor< Tdata >, Ndim > > > &dVs_minus_gauss) |
| |
| template<typename Tout , typename Tin > |
| std::map< TA, std::map< TAK, Tout > > | set_Vq_dVq_minus_gauss (const UnitCell &ucell, const std::vector< TA > &list_A0, const std::vector< TAC > &list_A1, std::map< TA, std::map< TAC, Tin > > &Vs_dVs_minus_gauss) |
| |
| template<typename Tout , typename Tin > |
| std::map< TA, std::map< TAK, Tout > > | set_Vq_dVq (const UnitCell &ucell, const std::vector< TA > &list_A0_pair_k, const std::vector< TAK > &list_A1_pair_k, std::map< TA, std::map< TAC, Tin > > &Vs_dVs_minus_gauss_in, const T_func_DPcal_Vq_dVq_minus_gauss< Tout, Tin > &func_cal_Vq_dVq_minus_gauss, const T_func_DPcal_Vq_dVq_gauss< Tout > &func_cal_Vq_dVq_gauss) |
| |
| template<typename Tout , typename Tin > |
| std::map< TA, std::map< TAC, Tout > > | set_Vs_dVs (const UnitCell &ucell, const std::vector< TA > &list_A0_pair_R, const std::vector< TAC > &list_A1_pair_R, std::map< TA, std::map< TAK, Tin > > &Vq) |
| |
| std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > | init_gauss (std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > &orb_in) |
| |
| double | cal_V_Rcut (const int it0, const int it1) |
| |
| double | get_Rcut_max (const int it0, const int it1) |
| |