ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
structure_factor.h
Go to the documentation of this file.
1#ifndef STRUCTURE_FACTOR_H
2#define STRUCTURE_FACTOR_H
3
8
10{
11
12public:
15 void set(const ModulePW::PW_Basis* rho_basis_in, const int& nbspline_in);
16
17 //===============================================
18 // Part 4: G vectors in reciprocal FFT box
19 //===============================================
20 public:
21 int nbspline=0;
22
23 // structure factor (ntype, ngmc)
25
26 void setup(const UnitCell* Ucell,
27 const Parallel_Grid& pgrid,
28 const ModulePW::PW_Basis* rho_basis); // Calculate structure factors
29
31 void bspline_sf(
32 const int,
33 const UnitCell* Ucell,
34 const Parallel_Grid& pgrid,
36
37 void bsplinecoef(std::complex<double> *b1, std::complex<double> *b2, std::complex<double> *b3,
38 const int nx, const int ny, const int nz, const int norder);
39
40
41public:
42 // phase of e^{-iG*tau_s}
43 ModuleBase::ComplexMatrix eigts1; // dimension: [Ucell->nat, 2*this->ncx + 1]
44 ModuleBase::ComplexMatrix eigts2; // dimension: [Ucell->nat, 2*this->ncy + 1]
45 ModuleBase::ComplexMatrix eigts3; // dimension: [Ucell->nat, 2*this->ncz + 1]
46
47 template <typename FPTYPE> std::complex<FPTYPE> * get_eigts1_data() const;
48 template <typename FPTYPE> std::complex<FPTYPE> * get_eigts2_data() const;
49 template <typename FPTYPE> std::complex<FPTYPE> * get_eigts3_data() const;
50
51 public:
52 // sf with k points
53 std::complex<double>* get_sk(const int ik, const int it, const int ia, const ModulePW::PW_Basis_K* wfc_basis) const;
54 template <typename FPTYPE, typename Device>
55
56 void get_sk(Device* ctx, const int ik, const ModulePW::PW_Basis_K* wfc_basis, std::complex<FPTYPE>* sk) const;
57
58 std::complex<double>* get_skq(int ik,
59 int it,
60 int ia,
61 const ModulePW::PW_Basis_K* wfc_basis,
63
64 private:
65
66 const UnitCell* ucell=nullptr;
67 std::complex<float> * c_eigts1 = nullptr;
68 std::complex<float> * c_eigts2 = nullptr;
69 std::complex<float> * c_eigts3 = nullptr;
70
71 std::complex<double> * z_eigts1 = nullptr;
72 std::complex<double> * z_eigts2 = nullptr;
73 std::complex<double> * z_eigts3 = nullptr;
74
75 const ModulePW::PW_Basis* rho_basis = nullptr;
76 std::string device = "cpu";
77};
78#endif //PlaneWave class
Definition complexmatrix.h:13
3 elements vector
Definition vector3.h:24
Special pw_basis class. It includes different k-points.
Definition pw_basis_k.h:56
A class which can convert a function of "r" to the corresponding linear superposition of plane waves ...
Definition pw_basis.h:56
Definition parallel_grid.h:7
Definition structure_factor.h:10
ModuleBase::ComplexMatrix eigts3
Definition structure_factor.h:45
std::complex< double > * z_eigts3
Definition structure_factor.h:73
const UnitCell * ucell
Definition structure_factor.h:66
~Structure_Factor()
Definition charge_extra_test.cpp:89
std::complex< double > * z_eigts1
Definition structure_factor.h:71
void bsplinecoef(std::complex< double > *b1, std::complex< double > *b2, std::complex< double > *b3, const int nx, const int ny, const int nz, const int norder)
Definition structure_factor.cpp:314
std::complex< FPTYPE > * get_eigts3_data() const
void setup(const UnitCell *Ucell, const Parallel_Grid &pgrid, const ModulePW::PW_Basis *rho_basis)
Definition charge_extra_test.cpp:92
std::string device
Definition structure_factor.h:76
std::complex< double > * get_skq(int ik, int it, int ia, const ModulePW::PW_Basis_K *wfc_basis, ModuleBase::Vector3< double > q) const
Definition structure_factor_k.cpp:145
Structure_Factor()
Definition charge_extra_test.cpp:86
std::complex< float > * c_eigts2
Definition structure_factor.h:68
const ModulePW::PW_Basis * rho_basis
Definition structure_factor.h:75
std::complex< float > * c_eigts3
Definition structure_factor.h:69
void set(const ModulePW::PW_Basis *rho_basis_in, const int &nbspline_in)
Definition structure_factor.cpp:46
std::complex< FPTYPE > * get_eigts1_data() const
std::complex< FPTYPE > * get_eigts2_data() const
int nbspline
Definition structure_factor.h:21
ModuleBase::ComplexMatrix eigts1
Definition structure_factor.h:43
std::complex< double > * get_sk(const int ik, const int it, const int ia, const ModulePW::PW_Basis_K *wfc_basis) const
Definition psi_initializer_unit_test.cpp:85
void bspline_sf(const int, const UnitCell *Ucell, const Parallel_Grid &pgrid, const ModulePW::PW_Basis *rho_basis)
calculate structure factors through Cardinal B-spline interpolation
Definition structure_factor.cpp:208
std::complex< float > * c_eigts1
Definition structure_factor.h:67
ModuleBase::ComplexMatrix eigts2
Definition structure_factor.h:44
std::complex< double > * z_eigts2
Definition structure_factor.h:72
ModuleBase::ComplexMatrix strucFac
Definition structure_factor.h:24
Definition unitcell.h:15