1#ifndef W_ABACUS_DEVELOP_ABACUS_DEVELOP_SOURCE_source_pw_HAMILT_PWDFT_KERNELS_FORCE_OP_H
2#define W_ABACUS_DEVELOP_ABACUS_DEVELOP_SOURCE_source_pw_HAMILT_PWDFT_KERNELS_FORCE_OP_H
12template <
typename FPTYPE,
typename Device>
36 const std::complex<FPTYPE>& NEG_IMAG_UNIT,
37 const std::complex<FPTYPE>* vkb,
39 std::complex<FPTYPE>* vkb1);
42template <
typename FPTYPE,
typename Device>
73 const bool& nondiagonal,
74 const int& nbands_occ,
80 const int& forcenl_nc,
91 const std::complex<FPTYPE>* becp,
92 const std::complex<FPTYPE>* dbecp,
96 const int& nbands_occ,
101 const int& forcenl_nc,
111 const std::complex<FPTYPE>* deeq_nc,
112 const std::complex<FPTYPE>* becp,
113 const std::complex<FPTYPE>* dbecp,
117 const int& nbands_occ,
120 const int& forcenl_nc,
128 const std::complex<FPTYPE>* vu,
129 const int* orbital_corr,
130 const std::complex<FPTYPE>* becp,
131 const std::complex<FPTYPE>* dbecp,
135 const int& nbands_occ,
138 const int& forcenl_nc,
146 const FPTYPE* lambda,
147 const std::complex<FPTYPE>* becp,
148 const std::complex<FPTYPE>* dbecp,
152template <
typename FPTYPE,
typename Device>
157 const FPTYPE tpiba_omega,
162 const std::complex<FPTYPE>* aux,
168template <
typename FPTYPE,
typename Device>
177 const FPTYPE* it_fact,
178 const std::complex<FPTYPE>* aux,
182#if __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM
183template <
typename FPTYPE>
184struct cal_vkb1_nl_op<FPTYPE,
base_device::DEVICE_GPU>
186 void operator()(
const base_device::DEVICE_GPU* ctx,
192 const std::complex<FPTYPE>& NEG_IMAG_UNIT,
193 const std::complex<FPTYPE>* vkb,
195 std::complex<FPTYPE>* vkb1);
198template <
typename FPTYPE>
199struct cal_force_nl_op<FPTYPE,
base_device::DEVICE_GPU>
201 void operator()(
const base_device::DEVICE_GPU* ctx,
202 const bool& nondiagonal,
203 const int& nbands_occ,
209 const int& forcenl_nc,
220 const std::complex<FPTYPE>* becp,
221 const std::complex<FPTYPE>* dbecp,
224 void operator()(
const base_device::DEVICE_GPU* ctx,
225 const int& nbands_occ,
230 const int& forcenl_nc,
240 const std::complex<FPTYPE>* deeq_nc,
241 const std::complex<FPTYPE>* becp,
242 const std::complex<FPTYPE>* dbecp,
245 void operator()(
const base_device::DEVICE_GPU* ctx,
246 const int& nbands_occ,
249 const int& forcenl_nc,
257 const std::complex<FPTYPE>* vu,
258 const int* orbital_corr,
259 const std::complex<FPTYPE>* becp,
260 const std::complex<FPTYPE>* dbecp,
263 void operator()(
const base_device::DEVICE_GPU* ctx,
264 const int& nbands_occ,
267 const int& forcenl_nc,
275 const FPTYPE* lambda,
276 const std::complex<FPTYPE>* becp,
277 const std::complex<FPTYPE>* dbecp,
284template <
typename FPTYPE>
285void revertVkbValues(
const int* gcar_zero_ptrs,
286 std::complex<FPTYPE>* vkb_ptr,
287 const std::complex<FPTYPE>* vkb_save_ptr,
289 int gcar_zero_counts,
293 const std::complex<FPTYPE> coeff);
298template <
typename FPTYPE>
299void saveVkbValues(
const int* gcar_zero_ptrs,
300 const std::complex<FPTYPE>* vkb_ptr,
301 std::complex<FPTYPE>* vkb_save_ptr,
303 int gcar_zero_counts,
308template <
typename FPTYPE>
309struct cal_force_loc_op<FPTYPE,
base_device::DEVICE_GPU>{
313 const FPTYPE tpiba_omega,
318 const std::complex<FPTYPE>* aux,
324template <
typename FPTYPE>
325struct cal_force_ew_op<FPTYPE,
base_device::DEVICE_GPU>{
333 const FPTYPE* it_fact,
334 const std::complex<FPTYPE>* aux,
Definition force_op.h:169
void operator()(const int nat, const int npw, const int ig_gge0, const int *iat2it, const FPTYPE *gcar, const FPTYPE *tau, const FPTYPE *it_fact, const std::complex< FPTYPE > *aux, FPTYPE *forceion)
Definition force_op.h:170
Definition force_op.h:153
void operator()(const int nat, const int npw, const FPTYPE tpiba_omega, const int *iat2it, const int *ig2igg, const FPTYPE *gcar, const FPTYPE *tau, const std::complex< FPTYPE > *aux, const FPTYPE *vloc, const int vloc_nr, FPTYPE *forcelc)
Definition force_op.h:154
void operator()(const base_device::DEVICE_CPU *ctx, const int &nbands_occ, const int &ntype, const int &deeq_2, const int &deeq_3, const int &deeq_4, const int &forcenl_nc, const int &nbands, const int &nkb, const int *atom_nh, const int *atom_na, const FPTYPE &tpiba, const FPTYPE *d_wg, const bool &occ, const FPTYPE *d_ekb, const FPTYPE *qq_nt, const std::complex< FPTYPE > *deeq_nc, const std::complex< FPTYPE > *becp, const std::complex< FPTYPE > *dbecp, FPTYPE *force)
void operator()(const base_device::DEVICE_CPU *ctx, const bool &nondiagonal, const int &nbands_occ, const int &ntype, const int &spin, const int &deeq_2, const int &deeq_3, const int &deeq_4, const int &forcenl_nc, const int &nbands, const int &nkb, const int *atom_nh, const int *atom_na, const FPTYPE &tpiba, const FPTYPE *d_wg, const bool &occ, const FPTYPE *d_ekb, const FPTYPE *qq_nt, const FPTYPE *deeq, const std::complex< FPTYPE > *becp, const std::complex< FPTYPE > *dbecp, FPTYPE *force)
Calculate the final forces for multi-device.
void operator()(const base_device::DEVICE_CPU *ctx, const int &nbands_occ, const int &wg_nc, const int &ntype, const int &forcenl_nc, const int &nbands, const int &ik, const int &nkb, const int *atom_nh, const int *atom_na, const FPTYPE &tpiba, const FPTYPE *d_wg, const std::complex< FPTYPE > *vu, const int *orbital_corr, const std::complex< FPTYPE > *becp, const std::complex< FPTYPE > *dbecp, FPTYPE *force)
kernel for DFT+U
void operator()(const base_device::DEVICE_CPU *ctx, const int &nbands_occ, const int &wg_nc, const int &ntype, const int &forcenl_nc, const int &nbands, const int &ik, const int &nkb, const int *atom_nh, const int *atom_na, const FPTYPE &tpiba, const FPTYPE *d_wg, const FPTYPE *lambda, const std::complex< FPTYPE > *becp, const std::complex< FPTYPE > *dbecp, FPTYPE *force)
kernel for DeltaSpin
void operator()(const Device *ctx, const int &nkb, const int &npwx, const int &vkb_nc, const int &nbasis, const int &ipol, const std::complex< FPTYPE > &NEG_IMAG_UNIT, const std::complex< FPTYPE > *vkb, const FPTYPE *gcar, std::complex< FPTYPE > *vkb1)
The prestep to calculate the final forces.