ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
mixing.h
Go to the documentation of this file.
1#ifndef MIXING_H_
2#define MIXING_H_
3#include <functional>
4
5#include "mixing_data.h"
6
7namespace Base_Mixing
8{
9
18class Mixing
19{
20 public:
21 Mixing(){};
22 virtual ~Mixing(){};
23
32 virtual void init_mixing_data(Mixing_Data& mdata, const int& length, const size_t& type_size) const
33 {
34 mdata.resize(data_ndim, length, type_size);
35 }
36
48 virtual void push_data(Mixing_Data& mdata,
49 const double* data_in,
50 const double* data_out,
51 std::function<void(double*)> screen,
52 std::function<void(double*, const double*, const double*)> mix,
53 const bool& need_calcoef)
54 = 0;
55 virtual void push_data(
56 Mixing_Data& mdata,
57 const std::complex<double>* data_in,
58 const std::complex<double>* data_out,
59 std::function<void(std::complex<double>*)> screen,
60 std::function<void(std::complex<double>*, const std::complex<double>*, const std::complex<double>*)> mix,
61 const bool& need_calcoef)
62 = 0;
63
74 virtual void push_data(Mixing_Data& mdata,
75 const double* data_in,
76 const double* data_out,
77 std::function<void(double*)> screen,
78 const bool& need_calcoef);
79 virtual void push_data(Mixing_Data& mdata,
80 const std::complex<double>* data_in,
81 const std::complex<double>* data_out,
82 std::function<void(std::complex<double>*)> screen,
83 const bool& need_calcoef);
84
91 virtual void cal_coef(const Mixing_Data& mdata, std::function<double(double*, double*)> inner_product) = 0;
92 virtual void cal_coef(const Mixing_Data& mdata,
93 std::function<double(std::complex<double>*, std::complex<double>*)> inner_product)
94 = 0;
95
102 void mix_data(const Mixing_Data& mdata, double* data_mix);
103 void mix_data(const Mixing_Data& mdata, std::complex<double>* data_mix);
104
109 virtual void reset() = 0;
110
111 public:
112 // mixing_beta from INPUT
113 double mixing_beta = 0.7;
114 // coeficients for mixing
115 std::vector<double> coef;
116 // ndim for mixing
117 int data_ndim = 1;
118};
119
120} // namespace Base_Mixing
121
122#endif
data for Mixing class
Definition mixing_data.h:14
void resize(const int &ndim, const std::size_t &length, const size_t &type_size)
resize the data
Definition mixing_data.cpp:23
Mixing class can mixing different steps of data to solver the iteration problem. For equation x = f(x...
Definition mixing.h:19
virtual void push_data(Mixing_Data &mdata, const double *data_in, const double *data_out, std::function< void(double *)> screen, std::function< void(double *, const double *, const double *)> mix, const bool &need_calcoef)=0
virtual void push_data(Mixing_Data &mdata, const std::complex< double > *data_in, const std::complex< double > *data_out, std::function< void(std::complex< double > *)> screen, std::function< void(std::complex< double > *, const std::complex< double > *, const std::complex< double > *)> mix, const bool &need_calcoef)=0
double mixing_beta
Definition mixing.h:113
virtual void cal_coef(const Mixing_Data &mdata, std::function< double(double *, double *)> inner_product)=0
calculate coeficients for mixing
virtual void init_mixing_data(Mixing_Data &mdata, const int &length, const size_t &type_size) const
init mixing data
Definition mixing.h:32
void mix_data(const Mixing_Data &mdata, double *data_mix)
calculate the mixing data
Definition mixing.cpp:57
virtual ~Mixing()
Definition mixing.h:22
int data_ndim
Definition mixing.h:117
virtual void reset()=0
reset mixing
Mixing()
Definition mixing.h:21
std::vector< double > coef
Definition mixing.h:115
virtual void cal_coef(const Mixing_Data &mdata, std::function< double(std::complex< double > *, std::complex< double > *)> inner_product)=0
Definition broyden_mixing.cpp:9