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 PLANEWAVE_H
2#define PLANEWAVE_H
3
8#include "source_psi/psi.h"
9
11{
12
13public:
16 void set(const ModulePW::PW_Basis* rho_basis_in, const int& nbspline_in);
17
18 //===============================================
19 // Part 4: G vectors in reciprocal FFT box
20 //===============================================
21 public:
22 int nbspline=0;
23
24 // structure factor (ntype, ngmc)
26 void setup_structure_factor(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 void bsplinecoef(std::complex<double> *b1, std::complex<double> *b2, std::complex<double> *b3,
37 const int nx, const int ny, const int nz, const int norder);
38
39
40public:
41 // phase of e^{-iG*tau_s}
42 ModuleBase::ComplexMatrix eigts1; // dimension: [Ucell->nat, 2*this->ncx + 1]
43 ModuleBase::ComplexMatrix eigts2; // dimension: [Ucell->nat, 2*this->ncy + 1]
44 ModuleBase::ComplexMatrix eigts3; // dimension: [Ucell->nat, 2*this->ncz + 1]
45
46 template <typename FPTYPE> std::complex<FPTYPE> * get_eigts1_data() const;
47 template <typename FPTYPE> std::complex<FPTYPE> * get_eigts2_data() const;
48 template <typename FPTYPE> std::complex<FPTYPE> * get_eigts3_data() const;
49
50 public:
51 // sf with k points
52 std::complex<double>* get_sk(const int ik, const int it, const int ia, const ModulePW::PW_Basis_K* wfc_basis) const;
53 template <typename FPTYPE, typename Device>
54 void get_sk(Device* ctx, const int ik, const ModulePW::PW_Basis_K* wfc_basis, std::complex<FPTYPE>* sk) const;
55 std::complex<double>* get_skq(int ik,
56 int it,
57 int ia,
58 const ModulePW::PW_Basis_K* wfc_basis,
60
61 private:
62 const UnitCell* ucell=nullptr;
63 std::complex<float> * c_eigts1 = nullptr, * c_eigts2 = nullptr, * c_eigts3 = nullptr;
64 std::complex<double> * z_eigts1 = nullptr, * z_eigts2 = nullptr, * z_eigts3 = nullptr;
65 const ModulePW::PW_Basis* rho_basis = nullptr;
66 std::string device = "cpu";
67};
68#endif //PlaneWave class
Definition complexmatrix.h:14
3 elements vector
Definition vector3.h:22
Special pw_basis class. It includes different k-points.
Definition pw_basis_k.h:57
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:8
Definition structure_factor.h:11
ModuleBase::ComplexMatrix eigts3
Definition structure_factor.h:44
const UnitCell * ucell
Definition structure_factor.h:62
~Structure_Factor()
Definition charge_extra_test.cpp:89
std::complex< double > * z_eigts1
Definition structure_factor.h:64
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:301
void setup_structure_factor(const UnitCell *Ucell, const Parallel_Grid &pgrid, const ModulePW::PW_Basis *rho_basis)
Definition charge_extra_test.cpp:92
std::complex< float > * c_eigts2
Definition structure_factor.h:63
std::complex< FPTYPE > * get_eigts3_data() const
std::complex< float > * c_eigts3
Definition structure_factor.h:63
std::string device
Definition structure_factor.h:66
Structure_Factor()
Definition charge_extra_test.cpp:86
std::complex< double > * z_eigts3
Definition structure_factor.h:64
const ModulePW::PW_Basis * rho_basis
Definition structure_factor.h:65
std::complex< double > * get_skq(int ik, int it, int ia, const ModulePW::PW_Basis_K *wfc_basis, ModuleBase::Vector3< double > q)
Definition structure_factor_k.cpp:146
void set(const ModulePW::PW_Basis *rho_basis_in, const int &nbspline_in)
Definition structure_factor.cpp:47
std::complex< FPTYPE > * get_eigts1_data() const
std::complex< FPTYPE > * get_eigts2_data() const
int nbspline
Definition structure_factor.h:22
ModuleBase::ComplexMatrix eigts1
Definition structure_factor.h:42
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:84
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:195
std::complex< double > * z_eigts2
Definition structure_factor.h:64
std::complex< float > * c_eigts1
Definition structure_factor.h:63
ModuleBase::ComplexMatrix eigts2
Definition structure_factor.h:43
ModuleBase::ComplexMatrix strucFac
Definition structure_factor.h:25
Definition unitcell.h:16