13 for(
int i = 0; i <
biggrid_->get_atoms_num(); ++i)
15 const auto atom =
biggrid_->get_atom(i);
17 phi += atom->get_nw();
31 for(
int i = 0; i < biggrid_->get_atoms_num(); ++i)
33 const auto atom_i = biggrid_->get_atom(i);
34 const auto r_i = atom_i->get_R();
38 const auto dm_mat = dm.find_matrix(atom_i->get_iat(), atom_i->get_iat(), 0, 0, 0);
39 constexpr T alpha = 1.0;
40 constexpr T beta = 1.0;
43 atoms_phi_len_[i], rows_,
44 alpha, dm_mat->get_pointer(), atoms_phi_len_[i],
45 &phi[0 * cols_ + atoms_startidx_[i]], cols_,
46 beta, &phi_dm[0 * cols_ + atoms_startidx_[i]], cols_);
49 const int start = is_symm ? i + 1 : 0;
51 for(
int j =
start; j < biggrid_->get_atoms_num(); ++j)
53 const auto atom_j = biggrid_->get_atom(j);
54 const auto r_j = atom_j->get_R();
56 const auto dm_mat = dm.find_matrix(atom_i->get_iat(), atom_j->get_iat(), r_i-r_j);
64 const int start_idx = get_atom_pair_start_end_idx_(i, j).first;
65 const int end_idx = get_atom_pair_start_end_idx_(i, j).second;
66 const int len = end_idx - start_idx + 1;
74 const T alpha = is_symm ? 2.0 : 1.0;
75 constexpr T beta = 1.0;
78 len, atoms_phi_len_[j], atoms_phi_len_[i],
79 alpha, &phi[start_idx * cols_ + atoms_startidx_[i]], cols_,
80 dm_mat->get_pointer(), atoms_phi_len_[j],
81 beta, &phi_dm[start_idx * cols_ + atoms_startidx_[j]], cols_);
95 for(
int i = 0; i < biggrid_->get_mgrids_num(); i++)
97 T vldr3_mgrid = vl[meshgrids_local_idx_[i]] * dr3;
98 for(
int j = 0; j < cols_; j++)
100 result[idx] = phi[idx] * vldr3_mgrid;
115 std::vector<T> tmp_hr;
116 for(
int i = 0; i <
biggrid_->get_atoms_num(); ++i)
118 const auto atom_i =
biggrid_->get_atom(i);
119 const auto& r_i = atom_i->get_R();
120 const int iat_i = atom_i->get_iat();
123 for(
int j = 0; j <
biggrid_->get_atoms_num(); ++j)
125 const auto atom_j =
biggrid_->get_atom(j);
126 const auto& r_j = atom_j->get_R();
127 const int iat_j = atom_j->get_iat();
142 const auto result = hr.
find_matrix(iat_i, iat_j, r_i-r_j);
144 if(result ==
nullptr)
151 const int len = end_idx - start_idx + 1;
158 tmp_hr.resize(n_i * n_j);
161 constexpr T alpha=1, beta=1;
163 'T',
'N', n_i, n_j, len,
166 beta, tmp_hr.data(), n_j,
169 result->add_array_ts(tmp_hr.data());
181 constexpr int inc = 1;
182 for(
int i = 0; i < biggrid_->get_mgrids_num(); ++i)
184 rho[meshgrids_local_idx_[i]] +=
BlasConnector::dotc(cols_, phi_j+i*cols_, inc, phi_i+i*cols_, inc);
static float dotc(const int n, const float *const X, const int incX, const float *const Y, const int incY, base_device::AbacusDevice_t device_type=base_device::AbacusDevice_t::CpuDevice)
Definition blas_connector_vector.cpp:224
static void gemm(const char transa, const char transb, const int m, const int n, const int k, const float alpha, const float *a, const int lda, const float *b, const int ldb, const float beta, float *c, const int ldc, base_device::AbacusDevice_t device_type=base_device::AbacusDevice_t::CpuDevice)
Definition blas_connector_matrix.cpp:20
static void symm_cm(const char side, const char uplo, const int m, const int n, const float alpha, const float *a, const int lda, const float *b, const int ldb, const float beta, float *c, const int ldc, base_device::AbacusDevice_t device_type=base_device::AbacusDevice_t::CpuDevice)
Definition blas_connector_matrix.cpp:361
void phi_mul_phi(const T *const phi_i, const T *const phi_j, HContainer< T > &hr, const Triangular_Matrix triangular_matrix) const
Definition phi_operator.hpp:109
void phi_mul_vldr3(const T *const vl, const T dr3, const T *const phi, T *const result) const
Definition phi_operator.hpp:88
void phi_dot_phi(const T *const phi_i, const T *const phi_j, T *const rho) const
Definition phi_operator.hpp:176
std::shared_ptr< const BigGrid > biggrid_
Definition phi_operator.h:143
std::vector< std::vector< Vec3d > > atoms_relative_coords_
Definition phi_operator.h:147
const std::pair< int, int > & get_atom_pair_start_end_idx_(int a, int b) const
Definition phi_operator.h:119
std::vector< int > atoms_phi_len_
Definition phi_operator.h:159
Triangular_Matrix
Definition phi_operator.h:22
std::vector< int > atoms_startidx_
Definition phi_operator.h:154
void set_phi(T *phi) const
Definition phi_operator.hpp:11
void phi_mul_dm(const T *const phi, const HContainer< T > &dm, const bool is_symm, T *const phi_dm) const
Definition phi_operator.hpp:23
int cols_
Definition phi_operator.h:137
Definition hcontainer.h:144
BaseMatrix< T > * find_matrix(int i, int j, int rx, int ry, int rz)
find BaseMatrix with atom index atom_i and atom_j and R index (rx, ry, rz) This interface can be used...
Definition hcontainer.cpp:261
#define T
Definition exp.cpp:237
void ZEROS(std::complex< T > *u, const TI n)
Definition global_function.h:109
Definition batch_biggrid.cpp:4
@ CpuDevice
Definition types.h:14
iclock::time_point start
Definition test_partition.cpp:22