ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
pulay_fs_gint.hpp
Go to the documentation of this file.
1#pragma once
2#include "pulay_fs.h"
7namespace PulayForceStress
8{
9 template<typename TK, typename TR>
14 const UnitCell& ucell,
15 const elecstate::Potential* pot,
16 const bool& isforce,
17 const bool& isstress,
18 const bool& set_dmr_gint)
19 {
20 const int nspin = PARAM.inp.nspin;
21 std::vector<const double*> vr_eff(nspin, nullptr);
22 std::vector<const double*> vofk_eff(nspin, nullptr);
24 {
25 for (int is = 0; is < nspin; ++is)
26 {
27 vr_eff[is] = pot->get_effective_v(is);
28 vofk_eff[is] = pot->get_effective_vofk(is);
29 }
30 ModuleGint::cal_gint_fvl_meta(nspin, vr_eff, vofk_eff, dm.get_DMR_vector(), isforce, isstress, &f, &s);
31 }
32 else
33 {
34 for(int is = 0; is < nspin; ++is)
35 {
36 vr_eff[is] = pot->get_effective_v(is);
37 }
38 ModuleGint::cal_gint_fvl(nspin, vr_eff, dm.get_DMR_vector(), isforce, isstress, &f, &s);
39 }
40
41 if (isstress) { StressTools::stress_fill(-1.0, ucell.omega, s); }
42 }
43}
Definition matrix.h:19
const Input_para & inp
Definition parameter.h:26
Definition unitcell.h:17
double & omega
Definition unitcell.h:34
static int get_func_type()
Definition xc_functional.h:67
Definition density_matrix.h:36
const std::vector< hamilt::HContainer< TR > * > & get_DMR_vector() const
get pointer vector of DMR
Definition density_matrix.h:148
Definition potential_new.h:49
ModuleBase::matrix & get_effective_vofk()
Definition potential_new.h:112
ModuleBase::matrix & get_effective_v()
Definition potential_new.h:81
void cal_gint_fvl(const int nspin, const std::vector< const double * > &vr_eff, const std::vector< HContainer< double > * > &dm_vec, const bool isforce, const bool isstress, ModuleBase::matrix *fvl, ModuleBase::matrix *svl)
Definition gint_interface.cpp:136
void cal_gint_fvl_meta(const int nspin, const std::vector< const double * > &vr_eff, const std::vector< const double * > &vofk, const std::vector< HContainer< double > * > &dm_vec, const bool isforce, const bool isstress, ModuleBase::matrix *fvl, ModuleBase::matrix *svl)
Definition gint_interface.cpp:158
Definition pulay_fs.h:13
void cal_pulay_fs(ModuleBase::matrix &f, ModuleBase::matrix &s, const elecstate::DensityMatrix< TK, TR > &dm, const UnitCell &ucell, const Parallel_Orbitals &pv, const double *(&dHSx)[3], const double *(&dHSxy)[6], const bool &isforce, const bool &isstress, Record_adj *ra=nullptr, const double &factor_force=1.0, const double &factor_stress=1.0)
for 2-center-integration terms, provided force and stress derivatives
void stress_fill(const double &lat0_, const double &omega_, ModuleBase::matrix &stress_matrix)
Definition stress_tools.cpp:4
Parameter PARAM
Definition parameter.cpp:3
int nspin
LDA ; LSDA ; non-linear spin.
Definition input_parameter.h:85