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