ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
lr_util_xc.hpp
Go to the documentation of this file.
1#pragma once
2#include "lr_util.h"
3namespace LR_Util
4{
5 template<typename T>
6 void grad(const T* rhor,
8 const ModulePW::PW_Basis& rho_basis,
9 const double& tpiba)
10 {
11 std::vector<typename ToComplex<T>::type> rhog(rho_basis.npw);
12 rho_basis.real2recip(rhor, rhog.data());
13 XC_Functional::grad_rho(rhog.data(), gradrho, &rho_basis, tpiba);
14 }
15 template<typename T>
16 void grad(const std::vector<T>& rhor,
17 std::vector<ModuleBase::Vector3<T>>& gradrho,
18 const ModulePW::PW_Basis& rho_basis,
19 const double& tpiba)
20 {
21 grad(rhor.data(), gradrho.data(), rho_basis, tpiba);
22 }
23
24 template<typename T>
25 void lapl(const T* rhor, T* lapn,
26 const ModulePW::PW_Basis& rho_basis,
27 const double& tpiba2)
28 {
29 ModuleBase::GlobalFunc::ZEROS(lapn, rho_basis.nrxx);
30 std::vector<typename ToComplex<T>::type> rhog(rho_basis.npw);
31 std::vector<T> tmp_rhor(rho_basis.nrxx);
32 rho_basis.real2recip(rhor, rhog.data());
33 for (int i = 0;i < 3;++i)
34 {
35 for (int ig = 0; ig < rho_basis.npw; ig++) { rhog[ig] *= pow(rho_basis.gcar[ig][i], 2); }
36 rho_basis.recip2real(rhog.data(), tmp_rhor.data());
37 for (int ir = 0; ir < rho_basis.nrxx; ir++) { lapn[ir] -= tmp_rhor[ir] * tpiba2; }
38 }
39 }
40 template<typename T>
41 void lapl(const std::vector<T>& rhor,
42 std::vector<T>& lapn,
43 const ModulePW::PW_Basis& rho_basis,
44 const double& tpiba2)
45 {
46 lapl(rhor.data(), lapn.data(), rho_basis, tpiba2);
47 }
48}
3 elements vector
Definition vector3.h:22
A class which can convert a function of "r" to the corresponding linear superposition of plane waves ...
Definition pw_basis.h:56
int nrxx
Definition pw_basis.h:120
void real2recip(const FPTYPE *in, std::complex< FPTYPE > *out, const bool add=false, const FPTYPE factor=1.0) const
transform real space to reciprocal space
Definition pw_transform.cpp:79
int npw
Definition pw_basis.h:115
void recip2real(const std::complex< FPTYPE > *in, FPTYPE *out, const bool add=false, const FPTYPE factor=1.0) const
transform reciprocal space to real space
Definition pw_transform.cpp:205
ModuleBase::Vector3< double > * gcar
Definition pw_basis.h:131
static void grad_rho(const std::complex< double > *rhog, ModuleBase::Vector3< double > *gdr, const ModulePW::PW_Basis *rho_basis, const double tpiba)
Definition xc_functional_gradcorr.cpp:657
#define T
Definition exp.cpp:237
Definition lr_util.cpp:6
void grad(const T *rhor, ModuleBase::Vector3< T > *gradrho, const ModulePW::PW_Basis &rho_basis, const double &tpiba)
Definition lr_util_xc.hpp:6
void lapl(const T *rhor, T *lapn, const ModulePW::PW_Basis &rho_basis, const double &tpiba2)
Definition lr_util_xc.hpp:25
void ZEROS(std::complex< T > *u, const TI n)
Definition global_function.h:109