ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
gint_rho.h
Go to the documentation of this file.
1#pragma once
2
3#include <memory>
4#include <vector>
6#include "gint.h"
7#include "gint_info.h"
8
9namespace ModuleGint
10{
11
12class Gint_rho : public Gint
13{
14 public:
16 const std::vector<HContainer<double>*>& dm_vec,
17 const int nspin,
18 double **rho,
19 bool is_dm_symm = true)
20 : dm_vec_(dm_vec), nspin_(nspin), is_dm_symm_(is_dm_symm), rho_(rho) {}
21
22 void cal_gint();
23
24 private:
25 template<typename Real>
26 void cal_gint_impl_();
27
28 template<typename Real>
29 std::vector<HContainer<Real>> init_dm_gint_() const;
30
31 // rho is always accumulated in double (see phi_dot_phi). When Real=float,
32 // only phi and phi_dm are fp32; the per-meshgrid reduction is fp64.
33 template<typename Real>
34 void cal_rho_(
35 const std::vector<HContainer<Real>>& dm_gint_vec,
36 const std::vector<double*>& rho_data) const;
37
38 // input
39 const std::vector<HContainer<double>*> dm_vec_;
40 const int nspin_;
41
42 // if true, it means the DMR matrix is symmetric,
43 // which leads to faster computations compared to the asymmetric case.
44 const bool is_dm_symm_;
45
46 // output
47 double ** rho_ = nullptr;
48};
49
50}
Definition gint_rho.h:13
Gint_rho(const std::vector< HContainer< double > * > &dm_vec, const int nspin, double **rho, bool is_dm_symm=true)
Definition gint_rho.h:15
void cal_gint()
Definition gint_rho.cpp:9
std::vector< HContainer< Real > > init_dm_gint_() const
Definition gint_rho.cpp:41
const std::vector< HContainer< double > * > dm_vec_
Definition gint_rho.h:39
void cal_gint_impl_()
Definition gint_rho.cpp:27
void cal_rho_(const std::vector< HContainer< Real > > &dm_gint_vec, const std::vector< double * > &rho_data) const
Definition gint_rho.cpp:52
const bool is_dm_symm_
Definition gint_rho.h:44
double ** rho_
Definition gint_rho.h:47
const int nspin_
Definition gint_rho.h:40
Definition gint.h:10
Definition hcontainer.h:144
Definition batch_biggrid.cpp:4