ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
to_wannier90.h
Go to the documentation of this file.
1#ifndef TOWannier90_H
2#define TOWannier90_H
3
4#include <iostream>
5#include <algorithm>
6#include <cmath>
7#include <cstdlib>
8#include <vector>
9#include <unordered_set>
10
13#include "source_base/matrix.h"
14#include "source_base/matrix3.h"
15#include "source_cell/klist.h"
16
18{
19 public:
21
23 const bool &out_wannier_mmn,
24 const bool &out_wannier_amn,
25 const bool &out_wannier_unk,
26 const bool &out_wannier_eig,
27 const bool &out_wannier_wvfn_formatted,
28 const std::string &nnkpfile,
29 const std::string &wannier_spin
30 );
32
33 void calculate();
34 void read_nnkp(const UnitCell& ucell, const K_Vectors& kv);
35
36 void out_eig(const ModuleBase::matrix& ekb);
37 void cal_Amn();
38 void cal_Mmn();
39 void out_unk();
40
41 protected:
42 bool try_read_nnkp(const UnitCell& ucell, const K_Vectors& kv);
43
44 // Parameters related to k point
45 int num_kpts=0;
47 std::vector<std::vector<int>> nnlist;
48 std::vector<std::vector<ModuleBase::Vector3<double>>> nncell;
49 int nntot = 0;
51
52 // Parameters related to trial orbitals
53 int num_wannier=0; // Number of Wannier orbits
55 int *L = nullptr;
56 int *m = nullptr;
57 int *rvalue = nullptr;
60 double *alfa = nullptr;
61 int *spin_eig = nullptr; // 'up' state is 1, 'down' state is -1
62 ModuleBase::Vector3<double> *spin_qaxis = nullptr; // spin quantisation axis
63 std::complex<double> *up_con = nullptr;
64 std::complex<double> *dn_con = nullptr;
65
66 // Wannier control parameters
67 bool out_wannier_mmn = true;
68 bool out_wannier_amn = true;
69 bool out_wannier_unk = true;
70 bool out_wannier_eig = true;
72
73 std::string nnkpfile = "";
74 std::string wannier_file_name = "seedname";
75 std::string wannier_spin = "up";
76
78 // int *exclude_bands = nullptr;
79 std::unordered_set<int> exclude_bands;
80 // bool *tag_cal_band = nullptr;
81 int num_bands = 0;
82 int *cal_band_index = nullptr;
83 bool gamma_only_wannier = false;
84
85
86};
87
88#endif
Definition klist.h:12
3 elements vector
Definition vector3.h:24
Definition matrix.h:18
Definition unitcell.h:15
Definition to_wannier90.h:18
int cal_num_kpts
Definition to_wannier90.h:46
int num_kpts
Definition to_wannier90.h:45
void cal_Amn()
Definition to_wannier90.cpp:124
bool out_wannier_wvfn_formatted
Definition to_wannier90.h:71
int start_k_index
Definition to_wannier90.h:50
std::vector< std::vector< int > > nnlist
Definition to_wannier90.h:47
toWannier90()
Definition to_wannier90.cpp:10
std::string nnkpfile
Definition to_wannier90.h:73
ModuleBase::Vector3< double > * x_axis
Definition to_wannier90.h:59
int * m
Definition to_wannier90.h:56
std::vector< std::vector< ModuleBase::Vector3< double > > > nncell
Definition to_wannier90.h:48
std::unordered_set< int > exclude_bands
Definition to_wannier90.h:79
ModuleBase::Vector3< double > * R_centre
Definition to_wannier90.h:54
ModuleBase::Vector3< double > * z_axis
Definition to_wannier90.h:58
double * alfa
Definition to_wannier90.h:60
std::string wannier_spin
Definition to_wannier90.h:75
void cal_Mmn()
Definition to_wannier90.cpp:128
std::complex< double > * dn_con
Definition to_wannier90.h:64
int * L
Definition to_wannier90.h:55
void out_unk()
Definition to_wannier90.cpp:120
std::complex< double > * up_con
Definition to_wannier90.h:63
int * rvalue
Definition to_wannier90.h:57
std::string wannier_file_name
Definition to_wannier90.h:74
int * spin_eig
Definition to_wannier90.h:61
int num_exclude_bands
Definition to_wannier90.h:77
bool out_wannier_unk
Definition to_wannier90.h:69
int * cal_band_index
Definition to_wannier90.h:82
bool try_read_nnkp(const UnitCell &ucell, const K_Vectors &kv)
Definition to_wannier90.cpp:132
~toWannier90()
Definition to_wannier90.cpp:43
int num_wannier
Definition to_wannier90.h:53
bool out_wannier_mmn
Definition to_wannier90.h:67
void calculate()
Definition to_wannier90.cpp:69
int num_bands
Definition to_wannier90.h:81
ModuleBase::Vector3< double > * spin_qaxis
Definition to_wannier90.h:62
bool out_wannier_amn
Definition to_wannier90.h:68
int nntot
Definition to_wannier90.h:49
void out_eig(const ModuleBase::matrix &ekb)
Definition to_wannier90.cpp:98
bool gamma_only_wannier
Definition to_wannier90.h:83
bool out_wannier_eig
Definition to_wannier90.h:70
void read_nnkp(const UnitCell &ucell, const K_Vectors &kv)
Definition to_wannier90.cpp:73