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
11template <
typename FPTYPE,
typename Device>
35 const std::complex<FPTYPE>& NEG_IMAG_UNIT,
36 const std::complex<FPTYPE>* vkb,
38 std::complex<FPTYPE>* vkb1);
41template <
typename FPTYPE,
typename Device>
72 const bool& nondiagonal,
73 const int& nbands_occ,
79 const int& forcenl_nc,
90 const std::complex<FPTYPE>* becp,
91 const std::complex<FPTYPE>* dbecp,
95 const int& nbands_occ,
100 const int& forcenl_nc,
110 const std::complex<FPTYPE>* deeq_nc,
111 const std::complex<FPTYPE>* becp,
112 const std::complex<FPTYPE>* dbecp,
116 const int& nbands_occ,
119 const int& forcenl_nc,
127 const std::complex<FPTYPE>* vu,
128 const int* orbital_corr,
129 const std::complex<FPTYPE>* becp,
130 const std::complex<FPTYPE>* dbecp,
134 const int& nbands_occ,
137 const int& forcenl_nc,
145 const FPTYPE* lambda,
146 const std::complex<FPTYPE>* becp,
147 const std::complex<FPTYPE>* dbecp,
151template <
typename FPTYPE,
typename Device>
156 const FPTYPE tpiba_omega,
161 const std::complex<FPTYPE>* aux,
167template <
typename FPTYPE,
typename Device>
176 const FPTYPE* it_fact,
177 const std::complex<FPTYPE>* aux,
181#if __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM
182template <
typename FPTYPE>
183struct cal_vkb1_nl_op<FPTYPE,
base_device::DEVICE_GPU>
185 void operator()(
const base_device::DEVICE_GPU* ctx,
191 const std::complex<FPTYPE>& NEG_IMAG_UNIT,
192 const std::complex<FPTYPE>* vkb,
194 std::complex<FPTYPE>* vkb1);
197template <
typename FPTYPE>
198struct cal_force_nl_op<FPTYPE,
base_device::DEVICE_GPU>
200 void operator()(
const base_device::DEVICE_GPU* ctx,
201 const bool& nondiagonal,
202 const int& nbands_occ,
208 const int& forcenl_nc,
219 const std::complex<FPTYPE>* becp,
220 const std::complex<FPTYPE>* dbecp,
223 void operator()(
const base_device::DEVICE_GPU* ctx,
224 const int& nbands_occ,
229 const int& forcenl_nc,
239 const std::complex<FPTYPE>* deeq_nc,
240 const std::complex<FPTYPE>* becp,
241 const std::complex<FPTYPE>* dbecp,
244 void operator()(
const base_device::DEVICE_GPU* ctx,
245 const int& nbands_occ,
248 const int& forcenl_nc,
256 const std::complex<FPTYPE>* vu,
257 const int* orbital_corr,
258 const std::complex<FPTYPE>* becp,
259 const std::complex<FPTYPE>* dbecp,
262 void operator()(
const base_device::DEVICE_GPU* ctx,
263 const int& nbands_occ,
266 const int& forcenl_nc,
274 const FPTYPE* lambda,
275 const std::complex<FPTYPE>* becp,
276 const std::complex<FPTYPE>* dbecp,
283template <
typename FPTYPE>
284void revertVkbValues(
const int* gcar_zero_ptrs,
285 std::complex<FPTYPE>* vkb_ptr,
286 const std::complex<FPTYPE>* vkb_save_ptr,
288 int gcar_zero_counts,
292 const std::complex<FPTYPE> coeff);
297template <
typename FPTYPE>
298void saveVkbValues(
const int* gcar_zero_ptrs,
299 const std::complex<FPTYPE>* vkb_ptr,
300 std::complex<FPTYPE>* vkb_save_ptr,
302 int gcar_zero_counts,
307template <
typename FPTYPE>
308struct cal_force_loc_op<FPTYPE,
base_device::DEVICE_GPU>{
312 const FPTYPE tpiba_omega,
317 const std::complex<FPTYPE>* aux,
323template <
typename FPTYPE>
324struct cal_force_ew_op<FPTYPE,
base_device::DEVICE_GPU>{
332 const FPTYPE* it_fact,
333 const std::complex<FPTYPE>* aux,
Definition force_op.h:168
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:169
Definition force_op.h:152
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:153
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.