ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
FORCE.h
Go to the documentation of this file.
1#ifndef W_ABACUS_DEVELOP_ABACUS_DEVELOP_SOURCE_MODULE_HAMILT_LCAO_HAMILT_LCAODFT_FORCE_H
2#define W_ABACUS_DEVELOP_ABACUS_DEVELOP_SOURCE_MODULE_HAMILT_LCAO_HAMILT_LCAODFT_FORCE_H
3
15#include "source_psi/psi.h"
16
17#ifndef TGINT_H
18#define TGINT_H
19template <typename T>
20struct TGint;
21template <>
22struct TGint<double>
23{
25};
26template <>
27struct TGint<std::complex<double>>
28{
29 using type = Gint_k;
30};
31#endif
32
33template <typename T>
35
36template <typename T>
38{
39 public:
40 friend class Force_Stress_LCAO<T>;
41
44
45 private:
47
49
50 // orthonormal force + contribution from T and VNL
51 void ftable(const bool isforce,
52 const bool isstress,
53 ForceStressArrays& fsr, // mohan add 2024-06-16
54 const UnitCell& ucell,
55 const Grid_Driver& gd,
56 const psi::Psi<T>* psi,
57 const elecstate::ElecState* pelec,
58 ModuleBase::matrix& foverlap,
59 ModuleBase::matrix& ftvnl_dphi,
60 ModuleBase::matrix& fvnl_dbeta,
61 ModuleBase::matrix& fvl_dphi,
62 ModuleBase::matrix& soverlap,
63 ModuleBase::matrix& stvnl_dphi,
64 ModuleBase::matrix& svnl_dbeta,
65 ModuleBase::matrix& svl_dphi,
66#ifdef __MLALGO
67 ModuleBase::matrix& fvnl_dalpha,
68 ModuleBase::matrix& svnl_dalpha,
70#endif
71 typename TGint<T>::type& gint,
72 const TwoCenterBundle& two_center_bundle,
73 const LCAO_Orbitals& orb,
74 const Parallel_Orbitals& pv,
75 const K_Vectors* kv = nullptr,
76 Record_adj* ra = nullptr);
77
78 // get the ds, dt, dvnl.
79 void allocate(const UnitCell& ucell,
80 const Grid_Driver& gd,
81 const Parallel_Orbitals& pv,
82 ForceStressArrays& fsr, // mohan add 2024-06-15
83 const TwoCenterBundle& two_center_bundle,
84 const LCAO_Orbitals& orb,
85 const int& nks = 0,
86 const std::vector<ModuleBase::Vector3<double>>& kvec_d = {});
87
89
90 void average_force(double* fm);
91
92 // void test(Parallel_Orbitals& pv, double* mm, const std::string& name);
93
94 //-------------------------------------------------------------
95 // forces reated to overlap matrix
96 // forces related to energy density matrix
97 //-------------------------------------------------------------
98
99 void cal_fedm(const bool isforce,
100 const bool isstress,
102 const UnitCell& ucell,
104 const psi::Psi<T>* psi,
105 const Parallel_Orbitals& pv,
106 const elecstate::ElecState* pelec,
107 ModuleBase::matrix& foverlap,
108 ModuleBase::matrix& soverlap,
109 const K_Vectors* kv = nullptr,
110 Record_adj* ra = nullptr);
111
112 //-------------------------------------------------------------
113 // forces related to kinetic and non-local pseudopotentials
114 //--------------------------------------------------------------
116 const Parallel_Orbitals& pv,
117 const UnitCell& ucell,
119 const bool isforce,
120 const bool isstress,
121 ModuleBase::matrix& ftvnl_dphi,
122 ModuleBase::matrix& stvnl_dphi,
123 Record_adj* ra = nullptr);
124
125 //-------------------------------------------
126 // forces related to local pseudopotentials
127 //-------------------------------------------
128 void cal_fvl_dphi(const bool isforce,
129 const bool isstress,
130 const elecstate::Potential* pot_in,
131 typename TGint<T>::type& gint,
132 ModuleBase::matrix& fvl_dphi,
133 ModuleBase::matrix& svl_dphi);
134
136 const psi::Psi<T>& psi,
138 const K_Vectors& kv,
139 const Parallel_Orbitals& pv,
140 const int& nspin,
141 const int& nbands,
142 const UnitCell& ucell,
143 Record_adj& ra) const;
144};
145
146#endif
Definition force_stress_arrays.h:5
Definition FORCE.h:38
elecstate::Potential * pot
Definition FORCE.h:48
Force_LCAO()
Definition FORCE.h:42
const Parallel_Orbitals * ParaV
Definition FORCE.h:46
void finish_ftable(ForceStressArrays &fsr)
elecstate::DensityMatrix< T, double > cal_edm(const elecstate::ElecState *pelec, const psi::Psi< T > &psi, const elecstate::DensityMatrix< T, double > &dm, const K_Vectors &kv, const Parallel_Orbitals &pv, const int &nspin, const int &nbands, const UnitCell &ucell, Record_adj &ra) const
void average_force(double *fm)
void cal_fedm(const bool isforce, const bool isstress, ForceStressArrays &fsr, const UnitCell &ucell, const elecstate::DensityMatrix< T, double > &dm, const psi::Psi< T > *psi, const Parallel_Orbitals &pv, const elecstate::ElecState *pelec, ModuleBase::matrix &foverlap, ModuleBase::matrix &soverlap, const K_Vectors *kv=nullptr, Record_adj *ra=nullptr)
void cal_fvl_dphi(const bool isforce, const bool isstress, const elecstate::Potential *pot_in, typename TGint< T >::type &gint, ModuleBase::matrix &fvl_dphi, ModuleBase::matrix &svl_dphi)
void allocate(const UnitCell &ucell, const Grid_Driver &gd, const Parallel_Orbitals &pv, ForceStressArrays &fsr, const TwoCenterBundle &two_center_bundle, const LCAO_Orbitals &orb, const int &nks=0, const std::vector< ModuleBase::Vector3< double > > &kvec_d={})
void ftable(const bool isforce, const bool isstress, ForceStressArrays &fsr, const UnitCell &ucell, const Grid_Driver &gd, const psi::Psi< T > *psi, const elecstate::ElecState *pelec, ModuleBase::matrix &foverlap, ModuleBase::matrix &ftvnl_dphi, ModuleBase::matrix &fvnl_dbeta, ModuleBase::matrix &fvl_dphi, ModuleBase::matrix &soverlap, ModuleBase::matrix &stvnl_dphi, ModuleBase::matrix &svnl_dbeta, ModuleBase::matrix &svl_dphi, ModuleBase::matrix &fvnl_dalpha, ModuleBase::matrix &svnl_dalpha, LCAO_Deepks< T > &ld, typename TGint< T >::type &gint, const TwoCenterBundle &two_center_bundle, const LCAO_Orbitals &orb, const Parallel_Orbitals &pv, const K_Vectors *kv=nullptr, Record_adj *ra=nullptr)
void cal_ftvnl_dphi(const elecstate::DensityMatrix< T, double > *dm, const Parallel_Orbitals &pv, const UnitCell &ucell, ForceStressArrays &fsr, const bool isforce, const bool isstress, ModuleBase::matrix &ftvnl_dphi, ModuleBase::matrix &stvnl_dphi, Record_adj *ra=nullptr)
~Force_LCAO()
Definition FORCE.h:43
Definition FORCE_STRESS.h:22
Definition gint_gamma.h:23
Definition gint_k.h:13
Definition sltk_grid_driver.h:43
Definition klist.h:13
Definition LCAO_deepks.h:52
Definition ORB_read.h:19
3 elements vector
Definition vector3.h:22
Definition matrix.h:19
Definition parallel_orbitals.h:9
Definition record_adj.h:11
Definition two_center_bundle.h:11
Definition unitcell.h:16
Definition density_matrix.h:36
Definition elecstate.h:15
Definition potential_new.h:48
Definition psi.h:37
std::complex< double > complex
Definition diago_cusolver.cpp:13
#define T
Definition exp.cpp:237
Definition exx_lip.h:23
base device SOURCES math_dngvd_test cpp endif() if(ENABLE_GOOGLEBENCH) AddTest(TARGET PERF_MODULE_HSOLVER_KERNELS LIBS parameter $
Definition CMakeLists.txt:10
Definition write_vxc.hpp:16