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 LCAO_FORCE_H
2#define LCAO_FORCE_H
3
13#include "source_psi/psi.h"
15
16template <typename T>
18
19template <typename T>
21{
22 public:
23 friend class Force_Stress_LCAO<T>;
24
27
28 private:
30
32
33 // orthonormal force + contribution from T and VNL
34 void ftable(const bool isforce,
35 const bool isstress,
36 ForceStressArrays& fsr, // mohan add 2024-06-16
37 const UnitCell& ucell,
38 const Grid_Driver& gd,
39 const psi::Psi<T>* psi,
40 const elecstate::ElecState* pelec,
41 const elecstate::DensityMatrix<T, double>* dm, // mohan add 2025-11-04
42 ModuleBase::matrix& foverlap,
43 ModuleBase::matrix& ftvnl_dphi,
44 ModuleBase::matrix& fvnl_dbeta,
45 ModuleBase::matrix& fvl_dphi,
46 ModuleBase::matrix& soverlap,
47 ModuleBase::matrix& stvnl_dphi,
48 ModuleBase::matrix& svnl_dbeta,
49 ModuleBase::matrix& svl_dphi,
50 ModuleBase::matrix& fvnl_dalpha,
51 ModuleBase::matrix& svnl_dalpha,
52 Setup_DeePKS<T>& deepks,
53 const TwoCenterBundle& two_center_bundle,
54 const LCAO_Orbitals& orb,
55 const Parallel_Orbitals& pv,
56 const K_Vectors* kv = nullptr,
57 Record_adj* ra = nullptr);
58
59 // get the ds, dt, dvnl.
60 void allocate(const UnitCell& ucell,
61 const Grid_Driver& gd,
62 const Parallel_Orbitals& pv,
63 ForceStressArrays& fsr, // mohan add 2024-06-15
64 const TwoCenterBundle& two_center_bundle,
65 const LCAO_Orbitals& orb,
66 const int& nks = 0,
67 const std::vector<ModuleBase::Vector3<double>>& kvec_d = {});
68
70
71 void average_force(double* fm);
72
73 // void test(Parallel_Orbitals& pv, double* mm, const std::string& name);
74
75 //-------------------------------------------------------------
76 // forces reated to overlap matrix
77 // forces related to energy density matrix
78 //-------------------------------------------------------------
79
80 void cal_fedm(const bool isforce,
81 const bool isstress,
83 const UnitCell& ucell,
85 const psi::Psi<T>* psi,
86 const Parallel_Orbitals& pv,
87 const elecstate::ElecState* pelec,
88 ModuleBase::matrix& foverlap,
89 ModuleBase::matrix& soverlap,
90 const K_Vectors* kv = nullptr,
91 Record_adj* ra = nullptr);
92
93 //-------------------------------------------------------------
94 // forces related to kinetic and non-local pseudopotentials
95 //--------------------------------------------------------------
97 const Parallel_Orbitals& pv,
98 const UnitCell& ucell,
100 const bool isforce,
101 const bool isstress,
102 ModuleBase::matrix& ftvnl_dphi,
103 ModuleBase::matrix& stvnl_dphi,
104 Record_adj* ra = nullptr);
105
106 //-------------------------------------------
107 // forces related to local pseudopotentials
108 //-------------------------------------------
109 void cal_fvl_dphi(const bool isforce,
110 const bool isstress,
111 const elecstate::Potential* pot_in,
112 ModuleBase::matrix& fvl_dphi,
113 ModuleBase::matrix& svl_dphi);
114
116 const psi::Psi<T>& psi,
118 const K_Vectors& kv,
119 const Parallel_Orbitals& pv,
120 const int& nspin,
121 const int& nbands,
122 const UnitCell& ucell,
123 Record_adj& ra) const;
124};
125
126#endif
Definition force_stress_arrays.h:5
Definition FORCE.h:21
elecstate::Potential * pot
Definition FORCE.h:31
Force_LCAO()
Definition FORCE.h:25
const Parallel_Orbitals * ParaV
Definition FORCE.h:29
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 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, const elecstate::DensityMatrix< T, double > *dm, 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, Setup_DeePKS< T > &deepks, const TwoCenterBundle &two_center_bundle, const LCAO_Orbitals &orb, const Parallel_Orbitals &pv, const K_Vectors *kv=nullptr, Record_adj *ra=nullptr)
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 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)
void cal_fvl_dphi(const bool isforce, const bool isstress, const elecstate::Potential *pot_in, ModuleBase::matrix &fvl_dphi, ModuleBase::matrix &svl_dphi)
~Force_LCAO()
Definition FORCE.h:26
Definition FORCE_STRESS.h:24
Definition sltk_grid_driver.h:43
Definition klist.h:13
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:12
Definition setup_deepks.h:23
Definition two_center_bundle.h:11
Definition unitcell.h:17
Definition density_matrix.h:36
Definition elecstate.h:15
Definition potential_new.h:49
Definition psi.h:37
#define T
Definition exp.cpp:237
Definition exx_lip.h:23