ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
exx_abfs-construct_orbs.h
Go to the documentation of this file.
1#ifndef EXX_ABFS_CONSTRUCT_ORBS_H
2#define EXX_ABFS_CONSTRUCT_ORBS_H
3
4#include "exx_abfs.h"
5
6#include <limits>
7#include <algorithm>
9#include "../../source_basis/module_ao/ORB_atomic_lm.h"
10
11class LCAO_Orbitals;
12
14{
15public:
16 static std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>> change_orbs(
17 const LCAO_Orbitals &orb_in,
18 const double kmesh_times );
19 static std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>> change_orbs(
20 const std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>> &orb_in,
21 const double kmesh_times );
22
23 static std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>> abfs_same_atom(
24 const UnitCell &ucell,
25 const LCAO_Orbitals& orb,
26 const std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>> &lcaos,
27 const double kmesh_times_mot,
28 const double times_threshold=0);
29
30 static void print_orbs_size(
31 const UnitCell& ucell,
32 const std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>> &orbs,
33 std::ostream &os);
34
35 // get the max number of orbitals among all elements
36 // static int get_nmax_total(const
37 // std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>> &orb_in); get
38 // number of orbitals for each element static std::map<int, int>
39 // get_nw(const std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>>
40 // &orb_in);
41
42 // get multipole of orbitals for each element and angular moment
43 static std::vector<std::vector<std::vector<double>>> get_multipole(
44 const std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>>&
45 orb_in);
46
47 static std::vector<double> get_Rcut(
48 const std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>>&
49 orb_in);
50 static inline double get_Rmax(const std::vector<double>& rcut) {
51 return *std::max_element(rcut.begin(), rcut.end());
52 }
53 static inline double get_Rmax(
54 const std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>>&
55 orb_in) {
56 std::vector<double> rcut = get_Rcut(orb_in);
57 return get_Rmax(rcut);
58 }
59
60 static void filter_empty_orbs(
61 std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>> &orbs);
62
63 private:
64 static std::vector<std::vector<std::vector<std::vector<double>>>> psi_mult_psi(
65 const std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>> &lcaos );
66
67 static std::vector<std::vector<std::vector<std::vector<double>>>> psir_mult_psir(
68 const std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>> &lcaos );
69
70 static std::vector<std::vector<std::vector<std::vector<double>>>> orth(
71 const std::vector<std::vector<std::vector<std::vector<double>>>> &psis,
72 const std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>> &lcaos,
73 const double norm_threshold = std::numeric_limits<double>::min() );
74
75 static std::vector<std::vector<std::vector<std::vector<double>>>> pca(
76 const UnitCell &ucell,
77 const LCAO_Orbitals& orb,
78 const std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>> &abfs,
79 const std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>> &orbs,
80 const double kmesh_times_mot,
81 const double times_threshold );
82
83 static std::vector<std::vector<std::vector<std::vector<double>>>> div_r(
84 const std::vector<std::vector<std::vector<std::vector<double>>>> &psirs,
85 const std::vector<double> &r_radial );
86
87 static std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>> orbital(
88 const std::vector<std::vector<std::vector<std::vector<double>>>> &psis,
89 const std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>> &orbs_info,
90 const double kmesh_times);
91
92 static std::vector<std::vector<std::vector<std::vector<double>>>> get_psi(
93 const std::vector<std::vector<std::vector<Numerical_Orbital_Lm>>> &orbs );
94};
95
96#endif // EXX_ABFS_IO_ASA_H
Definition exx_abfs-construct_orbs.h:14
static std::vector< std::vector< std::vector< std::vector< double > > > > psi_mult_psi(const std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > &lcaos)
Definition exx_abfs-construct_orbs.cpp:156
static void print_orbs_size(const UnitCell &ucell, const std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > &orbs, std::ostream &os)
Definition exx_abfs-construct_orbs.cpp:474
static std::vector< std::vector< std::vector< std::vector< double > > > > pca(const UnitCell &ucell, const LCAO_Orbitals &orb, const std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > &abfs, const std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > &orbs, const double kmesh_times_mot, const double times_threshold)
Definition exx_abfs-construct_orbs.cpp:261
static double get_Rmax(const std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > &orb_in)
Definition exx_abfs-construct_orbs.h:53
static std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > orbital(const std::vector< std::vector< std::vector< std::vector< double > > > > &psis, const std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > &orbs_info, const double kmesh_times)
Definition exx_abfs-construct_orbs.cpp:396
static double get_Rmax(const std::vector< double > &rcut)
Definition exx_abfs-construct_orbs.h:50
static void filter_empty_orbs(std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > &orbs)
Definition exx_abfs-construct_orbs.cpp:544
static std::vector< std::vector< std::vector< std::vector< double > > > > orth(const std::vector< std::vector< std::vector< std::vector< double > > > > &psis, const std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > &lcaos, const double norm_threshold=std::numeric_limits< double >::min())
Definition exx_abfs-construct_orbs.cpp:330
static std::vector< std::vector< std::vector< std::vector< double > > > > div_r(const std::vector< std::vector< std::vector< std::vector< double > > > > &psirs, const std::vector< double > &r_radial)
Definition exx_abfs-construct_orbs.cpp:352
static std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > abfs_same_atom(const UnitCell &ucell, const LCAO_Orbitals &orb, const std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > &lcaos, const double kmesh_times_mot, const double times_threshold=0)
Definition exx_abfs-construct_orbs.cpp:81
static std::vector< std::vector< std::vector< std::vector< double > > > > psir_mult_psir(const std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > &lcaos)
Definition exx_abfs-construct_orbs.cpp:227
static std::vector< std::vector< std::vector< double > > > get_multipole(const std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > &orb_in)
Definition exx_abfs-construct_orbs.cpp:496
static std::vector< std::vector< std::vector< std::vector< double > > > > get_psi(const std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > &orbs)
Definition exx_abfs-construct_orbs.cpp:377
static std::vector< double > get_Rcut(const std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > &orb_in)
Definition exx_abfs-construct_orbs.cpp:523
static std::vector< std::vector< std::vector< Numerical_Orbital_Lm > > > change_orbs(const LCAO_Orbitals &orb_in, const double kmesh_times)
Definition exx_abfs-construct_orbs.cpp:11
int kmesh_times
Definition exx_abfs.h:25
Definition ORB_read.h:19
Definition unitcell.h:16