Loading [MathJax]/extensions/TeX/AMSsymbols.js
SIRIUS 7.5.0
Electronic structure library and applications
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Pages
density_matrix.hpp
1#ifndef __DENSITY_MATRIX_HPP__
2#define __DENSITY_MATRIX_HPP__
3
4namespace sirius {
5
7 private:
8 std::vector<sddk::mdarray<std::complex<double>, 3>> data_;
9 public:
10 density_matrix_t(Unit_cell const& uc__, int num_mag_comp__)
11 {
12 data_ = std::vector<sddk::mdarray<std::complex<double>, 3>>(uc__.num_atoms());
13 for (int ia = 0; ia < uc__.num_atoms(); ia++) {
14 auto& atom = uc__.atom(ia);
15 data_[ia] = sddk::mdarray<std::complex<double>, 3>(atom.mt_basis_size(), atom.mt_basis_size(),
16 num_mag_comp__);
17 }
18 this->zero();
19 }
20 void zero()
21 {
22 for (auto& e : data_) {
23 e.zero();
24 }
25 }
26 auto size() const
27 {
28 return data_.size();
29 }
30 auto& operator[](int ia__)
31 {
32 return data_[ia__];
33 }
34 auto const& operator[](int ia__) const
35 {
36 return data_[ia__];
37 }
38 auto const begin() const
39 {
40 return data_.begin();
41 }
42 auto const end() const
43 {
44 return data_.end();
45 }
46};
47
48inline void
49copy(density_matrix_t const& src__, density_matrix_t& dest__)
50{
51 for (size_t i = 0; i < src__.size(); i++) {
52 copy(src__[i], dest__[i]);
53 }
54}
55
56}
57
58#endif
Representation of a unit cell.
Definition: unit_cell.hpp:43
Atom const & atom(int id__) const
Return const atom instance by id.
Definition: unit_cell.hpp:344
int num_atoms() const
Number of atoms in the unit cell.
Definition: unit_cell.hpp:338
Multidimensional array with the column-major (Fortran) order.
Definition: memory.hpp:660
Namespace of the SIRIUS library.
Definition: sirius.f90:5